Optional data on stdin shouldn't block unless given.
//go:build scanstdin
package main
import (
"io/fs"
"os"
)
func main() {
if HasPipe(os.Stdin) {
// there is a fifo attached and you can read from os.Stdin
}
}
func HasPipe(file *os.File) bool {
fi, _ := file.Stat()
return fi.Mode()&fs.ModeNamedPipe == fs.ModeNamedPipe
}