欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

[Go] go等待读取最后一行的数据内容

程序员文章站 2022-07-02 12:34:21
这段代码是参照慕课网的视频教程,主要是f.Seek(0, os.SEEK_END)移动到末尾,但是里面有个小问题,当打开的文件被重新清空内容的清空下,就再也不能到读取数据了,比如在开启读取后 echo ''>1.log 这样就再也读不到了,tail包是解决了这个问题的 使用tail包测试时,有re- ......

这段代码是参照慕课网的视频教程,主要是f.seek(0, os.seek_end)移动到末尾,但是里面有个小问题,当打开的文件被重新清空内容的清空下,就再也不能到读取数据了,比如在开启读取后 echo ''>1.log 这样就再也读不到了,tail包是解决了这个问题的

package main

import (
    "bufio"
    "fmt"
    "io"
    "os"
    "strings"
    "time"
)

func main() {
    readchannel := make(chan string)
    go readfile(readchannel)
    for r := range readchannel {
        fmt.println(r)
    }
}
func readfile(readchannel chan string) {
    f, err := os.open("1.txt")
    if err != nil {
        panic(fmt.sprintf("open file error:%s", err.error()))
    }
    //移动到文件末尾
    f.seek(0, os.seek_end)
    reader := bufio.newreader(f)
    for {
        line, err := reader.readbytes('\n')
        fmt.println(err)
        if err == io.eof {
            time.sleep(time.second)
            continue
        } else if err != nil {
            panic("readbytes error:" + err.error())
        }

        linestr := strings.trimspace(string(line))
        readchannel <- linestr
    }
}

使用tail包测试时,有re-open文件

[Go] go等待读取最后一行的数据内容