有没有办法检查输入流(os.Stdin)是否有数据?
os.Stdin
从GO的初始stdin中读取帖子?显示了如何读取数据,但是不幸的是,如果没有数据通过管道传送到stdin中,则会阻塞。
os.Stdin与其他任何“文件”一样,因此您可以检查其大小:
package main import ( "fmt" "os" ) func main() { file := os.Stdin fi, err := file.Stat() if err != nil { fmt.Println("file.Stat()", err) } size := fi.Size() if size > 0 { fmt.Printf("%v bytes available in Stdin\n", size) } else { fmt.Println("Stdin is empty") } }
我将其构建为“管道”可执行文件,其工作方式如下:
$ ./pipe Stdin is empty $ echo test | ./pipe 5 bytes available in Stdin