gpt4 book ai didi

go - 如何检查是否已写入标准输出?

转载 作者:IT王子 更新时间:2023-10-29 02:15:36 27 4
gpt4 key购买 nike

我正在尝试测试一个能够使用“os”包的 stdout 变量打印到 stdout 的函数是否真的打印到 stdout。我运行了这个函数,我发现它确实打印到标准输出。现在我想弄清楚如何证明这个函数使用 golang 代码打印到标准输出。我可以使用“os”包的 stdout 变量来检查在调用数组中的函数之一后是否已写入 stdout 吗?

我试图通过调用 os.stdout 变量上的 Stat() 方法来确定是否写入了 stdout,以便访问 stdout 的大小和上次修改时间,但是大小和上次修改时间没有不反射(reflect)函数已写入标准输出的事实。

最佳答案

在我看来,处理这个问题的正确方法是让您的代码以某种方式将 io.Writer 作为参数,而不是直接使用 stdout。你真的应该避免在没有更高级别代码重定向它的情况下打印到标准输出。几乎所有的标准库都采用这种方法。默认情况下,很少有 stdlib 写入 stdout,而大多数地方确实有一个更通用的形式,它采用 Writer。例如,fmt.Printf is simply a convenience function for fmt.Fprintf.

也就是说,您可以模拟标准输出。如果您的代码正在推送到 stdout,您需要做的就是为 stdout 创建一个全局变量并写入到那里。这是在模拟 time.Now() 的 stdlib 测试中完成的。他们没有使用 time.Now,而是使用全局包 now() 并根据是否正在运行测试来设置它。

作为最后的手段,假设前两件事是不可能的,你可以复制当前的 os.Stdout 并用 os.Pipe 替换它。然后您需要另一个 goroutine 来监听该管道并报告返回的内容。

关于go - 如何检查是否已写入标准输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33189975/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com