使用log.Println
登录Go时,我经常会
2012/05/13 16:45:50 evaluating %v(PANIC=3)
我不确定如何确定我做错了什么,我假设某个地方fmt.Println
已经抓住了我自己的Stringer
接口实现之一产生的恐慌,以免崩溃我的程序由于记录失败。
我如何计算出正在发生的事情?为什么我收到这条错误信息?
答案 0 :(得分:3)
你是对的,String
方法存在恐慌。但它与log
包无关。 Println
使用%v
,%v
表示运行String
方法。在String
方法中发生混乱会调用catchPanic
。输出中3
就是恐慌的价值。
答案 1 :(得分:1)
没有用于检查它的代码很难说。要对其进行调试,可以尝试将log.Println("evaluating", foo)
替换为log.Printf("evaluating %#v\n", foo)
。它的工作方式有点不同:
package main
import "log"
type t int
func (t) String() string {
panic(3)
}
func main() {
var v t = 42
log.Println("evaluating", v)
log.Printf("evaluating %#v\n", v)
}
$ go run main.go
2012/05/13 11:19:49 evaluating %v(PANIC=3)
2012/05/13 11:19:49 evaluating 42
$