我知道我们可以使用 log
和 fmt
打印变量或错误。例如,如果我想打印变量,我可以这样做:
h := "world"
fmt.Printf("hello = %v\n", h)
log.Printf("halo = %v\n", h)
输出将是:
hello = world
2016/12/30 09:13:12 halo = world
通常在错误处理中我发现这样的日志
if err != nil {
log.Println("Error : something terrible happen -> ", err)
return err
}
但从上述情况我也可以使用 fmt
来打印这样的错误
fmt.Printf("Error : something terrible happen -> %v\n",err.Error())
使用 fmt
而不是 log
打印错误是一种好习惯吗?
然后我总是在调试时使用 fmt
而不是 log
来打印变量。
最佳答案
使用这些事实在 log
和 fmt
之间进行选择:
log
函数打印到 stderr默认可以directed to an arbitrary writer .fmt.Printf
函数打印到 stdout .log
函数可以print timestamp, source code location and other info .log
函数和fmt.Printf
都是线程安全的,但fmt.Printf
的并发写入可能会超出操作系统相关大小交错。
三个子问题的答案是“视情况而定”。
关于go - 何时使用 log over fmt 进行调试和打印错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41389933/