恐慌(“error_msg”)和恐慌(error.New(“error_msg”)之间有什么区别?

时间:2014-07-02 12:44:46

标签: go

考虑到我使用了原始的"错误"去打包。

并且,恐慌(11)和恐慌(" 11")之间的区别?

2 个答案:

答案 0 :(得分:5)

panic定义为func panic(v interface{}),调用panic(anything)将打印anything的字符串表示形式,然后打印调用函数的堆栈跟踪。

唯一不同的是,如果您使用recover,您将能够访问您传递给恐慌的任何内容,example

func main() {
    defer func() {
        if err := recover(); err != nil {
            if n, ok := err.(int); ok && n == 11 {
                fmt.Println("got 11!")
            }
        }
    }()
    panic(11)
}

答案 1 :(得分:3)

panic("error_msg")panic("11")恐慌一个字符串,panic(error.New("error_msg")恐慌错误,panic(11)恐慌整数。

如果您在recover期间未使用defer处理这些恐慌,那么无论您使用哪种恐慌都无关紧要,所有人都会打印“error_msg”或“11”。