1

登录 Go 时log.Println,我经常得到

2012/05/13 16:45:50 evaluating %v(PANIC=3)

我不确定如何确定我做错了什么,我假设某处fmt.Println发生了由我自己的Stringer接口实现之一产生的恐慌,以免由于日志记录失败而使我的程序崩溃。

我如何弄清楚发生了什么?为什么我会收到这个错误信息?

4

2 回答 2

3

你是对的,方法中存在恐慌Stringlog但这与包裹无关。Println使用%v%v表示运行String方法。在String方法调用中出现恐慌catchPanic。在你的输出3中是你恐慌的价值。

于 2012-05-13T09:29:15.287 回答
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
$ 
于 2012-05-13T09:22:36.800 回答