为什么 go 程序将输出打印到终端屏幕而不是 /dev/stderr?
各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题是《为什么 go 程序将输出打印到终端屏幕而不是 /dev/stderr?》,很明显是关于Golang的文章哈哈哈,其中内容主要会涉及到等等,如果能帮到你,觉得很不错的话,欢迎各位多多点评和分享!
问题内容正如我在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/foo
)
在 go 中,您可以通过将流传递给第一个参数中的 fmt.fprintf
等函数来专门选择要输出到的流。
今天关于《为什么 go 程序将输出打印到终端屏幕而不是 /dev/stderr?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在编程网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341