写入stdout
或日志时,如何确保来自多个 goroutine 的输出
是不是搞砸了输出?
e.g。确保输出就像这样
Routine 1 found 1235 entries
Routine 3 found 999 entries
Routine 2 found 24 entries
并不喜欢这个
Routine 1 fouRoutine 3 found 999 entries
nd 1235 entriRoutine 2 found 24 entries
es
我的意思是来自一个 goroutine 的输出不是与另一个同时写入
即。是否有一个库或标准方法来获取输出周围的信号量?
答案 0 :(得分:5)
使用log
包进行日志记录。来自log.Logger
:
Logger表示一个活动的日志记录对象,它为io.Writer生成输出行。每个日志记录操作只对Writer的Write方法进行一次调用。 Logger可以同时使用多个goroutines;它保证序列化对Writer的访问。
fmt
包generally not safe与多个goroutine一起使用。
如果关注时间(锁定的同步),请在日志语句前添加go
:
go log.Println("some log")
但请注意,日志输出可能(最肯定)延迟。