Optional stdin

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
}