【问题标题】:What's the difference between panic("error_msg") and panic(error.New("error_msg")?恐慌(“error_msg”)和恐慌(error.New(“error_msg”)有什么区别?
【发布时间】:2014-07-02 12:44:46
【问题描述】:

考虑到我使用的是原始的“错误” go 包。

还有,panic(11) 和 panic("11") 的区别?

【问题讨论】:

    标签: go


    【解决方案1】:

    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)
    }
    

    【讨论】:

      【解决方案2】:

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

      如果您在defer 期间不使用recover 处理这些恐慌,那么无论您使用哪个都没有关系,所有这些都将打印“error_msg”或“11”。

      【讨论】:

        猜你喜欢
        • 2011-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-11
        • 2013-11-21
        • 2021-09-21
        • 2013-12-12
        相关资源
        最近更新 更多