[Go] go等待讀取最後一行的數據內容

這段代碼是參照慕課網的視頻教程,主要是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文件spa

相關文章
相關標籤/搜索