登录 Go 时log.Println
,我经常得到
2012/05/13 16:45:50 evaluating %v(PANIC=3)
我不确定如何确定我做错了什么,我假设某处fmt.Println
发生了由我自己的Stringer
接口实现之一产生的恐慌,以免由于日志记录失败而使我的程序崩溃。
我如何弄清楚发生了什么?为什么我会收到这个错误信息?
登录 Go 时log.Println
,我经常得到
2012/05/13 16:45:50 evaluating %v(PANIC=3)
我不确定如何确定我做错了什么,我假设某处fmt.Println
发生了由我自己的Stringer
接口实现之一产生的恐慌,以免由于日志记录失败而使我的程序崩溃。
我如何弄清楚发生了什么?为什么我会收到这个错误信息?
你是对的,方法中存在恐慌String
。log
但这与包裹无关。Println
使用%v
和%v
表示运行String
方法。在String
方法调用中出现恐慌catchPanic
。在你的输出3
中是你恐慌的价值。
没有代码来检查很难说。要调试它,也许尝试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
$