[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文件

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM