我在Python中有这个方便的功能:
def follow(path):
with open(self.path) as lines:
lines.seek(0, 2) # seek to EOF
while True:
line = lines.readline()
if not line:
time.sleep(0.1)
continue
yield line
Run Code Online (Sandbox Code Playgroud)
它与UNIX类似tail -f:您可以获得文件的最后一行.它很方便,因为您可以在不阻塞的情况下获取生成器并将其传递给另一个函数.
然后我不得不在Go做同样的事情.我是这种语言的新手,所以我不确定我所做的是否是惯用/正确的Go.
这是代码:
func Follow(fileName string) chan string {
out_chan := make(chan string)
file, err := os.Open(fileName)
if err != nil {
log.Fatal(err)
}
file.Seek(0, os.SEEK_END)
bf := bufio.NewReader(file)
go func() {
for {
line, _, _ := bf.ReadLine()
if len(line) == 0 {
time.Sleep(10 * time.Millisecond)
} …Run Code Online (Sandbox Code Playgroud)