golang:实现类似tailf命令的功能
Posted 郭帅杰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang:实现类似tailf命令的功能相关的知识,希望对你有一定的参考价值。
支持自动结束tailf命令,本例适用于实时呈现临时文本文件内的日志信息
package main
import (
"bufio"
"fmt"
"io"
"log"
"os"
"time"
)
var stop = make(chan struct{})
func main() {
if len(os.Args) != 2 {
log.Fatalln("Usage: main <filename>")
}
fileName := os.Args[1]
file, err := os.Open(fileName)
if err != nil {
log.Fatalf("Open file fail:%v", err)
}
defer file.Close()
// 启动一个goroutine监听文件是否已经被删除,如果是则发送停止信号
go func() {
for{
_, err := os.Lstat(fileName)
if os.IsNotExist(err) {
stop <- struct{}{}
return
}
time.Sleep(time.Second)
}
}()
reader := bufio.NewReader(file)
var tick = time.NewTicker(500 * time.Millisecond)
func() {
for {
select {
case <-tick.C:
line, err := reader.ReadString('\\n')
if err != nil {
if err != io.EOF {
return
}
}
fmt.Print(line)
// 判断文本内容中是否有规定的结束字段,此处以DONE字符为例
if line == "DONE\\n" {
return
}
case <-stop:
return
}
}
}()
}
以上是关于golang:实现类似tailf命令的功能的主要内容,如果未能解决你的问题,请参考以下文章