相关疑难解决方法(0)

一个以上的goroutine打印到stdout是否安全?

我的程序中有多个goroutine,每个都在fmt.Println没有任何显式同步的情况下进行调用.这是安全的(即,每条线路是否单独出现而没有数据损坏),或者我是否需要创建另一个带有同步的goroutine来专门处理打印?

concurrency synchronization go goroutine

22
推荐指数
3
解决办法
7238
查看次数

何时使用log over fmt进行调试和打印错误?

我知道我们可以使用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在调试时打印变量.

go

17
推荐指数
3
解决办法
1万
查看次数

标签 统计

go ×2

concurrency ×1

goroutine ×1

synchronization ×1