我的程序中有多个goroutine,每个都在fmt.Println没有任何显式同步的情况下进行调用.这是安全的(即,每条线路是否单独出现而没有数据损坏),或者我是否需要创建另一个带有同步的goroutine来专门处理打印?
我知道我们可以使用log和打印变量或错误fmt.例如,如果我想打印变量,我可以这样做:
h := "world"
fmt.Printf("hello = %v\n", h)
log.Printf("halo = %v\n", h)
Run Code Online (Sandbox Code Playgroud)
输出将是:
hello = world
2016/12/30 09:13:12 halo = world
Run Code Online (Sandbox Code Playgroud)
并且通常在错误处理中我发现这样的日志
if err != nil {
log.Println("Error : something terrible happen -> ", err)
return err
}
Run Code Online (Sandbox Code Playgroud)
但从上面的情况我也可以fmt用来打印这样的错误
fmt.Printf("Error : something terrible happen -> %v\n",err.Error())
Run Code Online (Sandbox Code Playgroud)
使用fmt而不是log打印错误是一个好习惯吗?然后我总是使用fmt而不是log在调试时打印变量.