我有多个够程在我的节目,其中的每一个使得将呼叫fmt.Println
没有任何显式同步。 这是安全的(即,将每行单独出现不会造成数据损坏),或者我需要创建一个同步的另一个够程,专门处理打印?
Answer 1:
不,这不是安全的,即使你有时无法观察到任何麻烦。 IIRC,资金监测工具包尝试是在安全方面,所以可能混在某种可能发生,但没有进程崩溃的,有希望。
这是一个比较普遍的围棋规则的文件的实例:除非另有规定或者根据上下文明显的事情是不是并发访问安全。
人们可以在使用日志包一些小的初始设置的fmt.Print *功能一个很好的子集的安全版本。
Answer 2:
一切fmt
不会回落到w.Write()
可以看出这里 。 因为有它周围没有锁,一切都回落到执行Write()
由于仍然没有锁定(用于标准输出至少 ),也不能保证你的输出不会混淆。
我建议你使用一个全球性的日志程序。
此外,如果你只是想记录数据,使用log
包,它正确地锁定了访问输出。 请参阅实现以供参考。
Answer 3:
常用的方法(fmt.printLine)并不安全。 然而,也有一些方法。
log.Logger是“够程安全”: https://golang.org/pkg/log/#Logger
像这样的东西会造成任何安全去例程可以使用标准输出记录。
logger := log.New(os.Stdout, "", 0)
文章来源: Is it safe for more than one goroutine to print to stdout?