Golang 如何实现 stdin/stdout/stderr

How Golang implement stdin/stdout/stderr

我做了一个能够解析命令行输入的小程序。它通过 std.in 运行良好。然而,当我查阅官方文档进一步学习时,我发现对我来说太多了。

var (
   Stdin = NewFile(uintptr(syscall.Stdin), "/dev/stdin")
)

我分别看了func NewFiletype uintptyPackage syscall的文档,没看懂全文。另外,我也不知道/dev/stdin是什么意思。

除了go,我从未学过另一种静态编程语言。 stdin的神奇之处,我要如何领悟?

来自 syscall 包,标准输入只是数字 0:

var (
        Stdin  = 0
        Stdout = 1
        Stderr = 2
)

这仅仅是因为 posix 标准是 stdin 附加到第一个文件描述符 0。

由于 stdin 始终存在并默认打开,os.NewFile 可以将此文件描述符转换为 os.File,并使用标准 Linux 文件路径“/dev/stdin " 作为一个易于识别的文件名。