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命令的功能的主要内容,如果未能解决你的问题,请参考以下文章