在下面的例子中,我們結(jié)合使用了緩沖讀取文件和命令行 flag 解析這兩項(xiàng)技術(shù)。如果不加參數(shù),那么你輸入什么屏幕就打印什么。
參數(shù)被認(rèn)為是文件名,如果文件存在的話就打印文件內(nèi)容到屏幕。命令行執(zhí)行 cat test
測試輸出。
示例 12.11 cat.go:
package main
import (
"bufio"
"flag"
"fmt"
"io"
"os"
)
func cat(r *bufio.Reader) {
for {
buf, err := r.ReadBytes('\n')
if err == io.EOF {
break
}
fmt.Fprintf(os.Stdout, "%s", buf)
}
return
}
func main() {
flag.Parse()
if flag.NArg() == 0 {
cat(bufio.NewReader(os.Stdin))
}
for i := 0; i < flag.NArg(); i++ {
f, err := os.Open(flag.Arg(i))
if err != nil {
fmt.Fprintf(os.Stderr, "%s:error reading from %s: %s\n", os.Args[0], flag.Arg(i), err.Error())
continue
}
cat(bufio.NewReader(f))
}
}
在 12.6 章節(jié),我們將看到如何使用緩沖寫入。
練習(xí) 12.5:cat_numbered.go
擴(kuò)展 cat.go 例子,使用 flag 添加一個(gè)選項(xiàng),目的是為每一行頭部加入一個(gè)行號。使用 cat -n test
測試輸出。