登录 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
$