管道的内容,位于os.Stdin里,可以像普通文件一样操作os.Stdin,即可获取管道传过来的内容。
package main import ( "bufio" "fmt" "log" "os" ) func main() { fileInfo, _ := os.Stdin.Stat() if (fileInfo.Mode() & os.ModeNamedPipe) != os.ModeNamedPipe { log.Fatal("The command is intended to work with pipes.") } s := bufio.NewScanner(os.Stdin) for s.Scan() { fmt.Println(s.Text()) } }
通过os.Stdin的mode值来判断程序是否通过管道调用。
调用方法:cat test.txt |./pipe
参考url:http://blog.ralch.com/tutorial/golang-command-line-pipes/