英文:
What's the difference between panic("error_msg") and panic(error.New("error_msg")?
问题
考虑到我正在使用原始的"go"错误包。
那么,panic(11)和panic("11")之间有什么区别?
英文:
Considering I'm using the original "errors" go package.
And, the difference between panic(11) and panic("11")?
答案1
得分: 5
panic
被定义为 func panic(v interface{})
,调用 panic(anything)
会打印出 anything
的字符串表示,然后打印调用函数的堆栈跟踪。
唯一的区别是,如果你使用 recover
,你将能够访问传递给 panic 的任何内容,例如:
func main() {
defer func() {
if err := recover(); err != nil {
if n, ok := err.(int); ok && n == 11 {
fmt.Println("got 11!")
}
}
}()
panic(11)
}
英文:
panic
is defined as func panic(v interface{})
, calling panic(anything)
will print the the string representation of anything
then the stacktrace of the calling function.
Only difference is, if you use recover
, you will be able to access whatever you passed to panic, for 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
得分: 3
panic("error_msg")
和 panic("11")
会抛出一个字符串异常,而 panic(error.New("error_msg")
则会抛出一个错误异常,panic(11)
则会抛出一个整数异常。
如果你在 defer
中没有使用 recover
来处理这些异常,那么无论你使用哪种方式,都会打印出 "error_msg" 或 "11"。
英文:
panic("error_msg")
and panic("11")
panic a string while panic(error.New("error_msg")
panics an error and panic(11)
panics an integer.
If you do not handle these panics with recover
during defer
than it won't matter which you use, all will print the "error_msg" or "11".
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论