在golang源码中看到
go 会将输出打印到 os.Stderr
Stderr = NewFile(uintptr(syscall.Stderr), "/dev/stderr")
那么为什么我在终端中使用命令 go run main.go
运行这个程序
输出打印到终端屏幕,而不是 /dev/stderr
// main.go
func main() {
log.Println("this is my first log")
}
最佳答案
在标准的 Unix/Linux 终端中,stdout
和 stderr
都连接到终端,因此输出到那里。
这里有一个 shell 片段来阐明这一点:
$ echo "joe" >> /dev/stderr
joe
即使我们将“joe”回显到看起来像文件的东西,它也会被发送到屏幕上。将 /dev/stderr
替换为 /tmp/foo
,您将不会在屏幕上看到输出(尽管它会附加到文件 /tmp/富
)
在 Go 中,您可以通过在其第一个参数中将流传递给 fmt.Fprintf
等函数来具体选择输出到哪个流。
关于go - 为什么 go 程序将输出打印到终端屏幕而不是/dev/stderr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54494701/