Go 标准输出到磁盘文件,具有频率限制 if文件,err:=os.Create(os.TempDir()+“/stdout.txt”);无==错误{ //todo缓冲区写入 os.Stdout=file os.Stderr=文件 }否则{ log.Fatal(错误) }

Go 标准输出到磁盘文件,具有频率限制 if文件,err:=os.Create(os.TempDir()+“/stdout.txt”);无==错误{ //todo缓冲区写入 os.Stdout=file os.Stderr=文件 }否则{ log.Fatal(错误) },go,Go,这会将进程的输出写入磁盘,但如果没有频率控制,可能会对磁盘造成沉重负担。如何向写入操作添加缓冲区 问题在于os.Stdout不是一个接口,而是*os.File os.Stdout=bufio.NewWriter(文件)//错误 您不需要详细指定写入程序的实际限制,但可以添加一个缓冲区,使用标准库中的bufio.writer对写入程序进行批处理,直到达到一定大小。一个小的实现注意事项是,在关闭底层写入程序之前,必须小心地刷新缓冲区,以避免丢失输出数据。您没有详细指定写入程序的实际限制,但您可以使用

这会将进程的输出写入磁盘,但如果没有频率控制,可能会对磁盘造成沉重负担。如何向写入操作添加缓冲区

问题在于
os.Stdout
不是一个接口,而是
*os.File

os.Stdout=bufio.NewWriter(文件)//错误

您不需要详细指定写入程序的实际限制,但可以添加一个缓冲区,使用标准库中的
bufio.writer
对写入程序进行批处理,直到达到一定大小。一个小的实现注意事项是,在关闭底层写入程序之前,必须小心地刷新缓冲区,以避免丢失输出数据。

您没有详细指定写入程序的实际限制,但您可以使用标准库中的
bufio.Writer
添加一个缓冲区,该缓冲区可以对写入进行批处理,直到它们达到一定大小。一个小的实现注意事项是,在关闭底层写入程序之前,必须小心地刷新缓冲区,以避免丢失输出数据。

是的,但我希望在基本级别上转发输出,以便即使包是由其他人编写的,它也可以处理。是的,但我希望在基本级别上转发输出,因此,即使包是由其他人编写的,它也可以处理它。Go目前没有针对这种情况的实际解决方案。大多数想要写入流数据或打印日志的模块都会提供一些API供您控制。如果您依赖于不应该直接写入
os.Stdout
/
os.Stderr
(不管它们的值是什么)的模块,那么您可能应该对此提出一个问题。你能做的就是制作你自己的编写器,并尝试让所有东西都使用它,而不是直接去
os.Stdout
/
os.Stderr
。最坏的情况是,您可以将两者都设置为写入
/dev/null
,以关闭不必要的噪音,尽管在使用CGO时,这可能会失败。对于这种情况,Go目前没有实际的解决方案。大多数想要写入流数据或打印日志的模块都会提供一些API供您控制。如果您依赖于不应该直接写入
os.Stdout
/
os.Stderr
(不管它们的值是什么)的模块,那么您可能应该对此提出一个问题。你能做的就是制作你自己的编写器,并尝试让所有东西都使用它,而不是直接去
os.Stdout
/
os.Stderr
。在最坏的情况下,您可以将两者都设置为write to
/dev/null
,以关闭不需要的噪声,尽管在使用CGO时,即使这样也可能失败。