Go 不接收错误会触发恐慌,但接收错误不会触发恐慌

使用以下代码:


var i interface{} = "hello"


f, ok := i.(float64)

fmt.Println(f, ok)


f = i.(float64) // panic

fmt.Println(f)

为什么不捕获错误会导致恐慌,而捕获错误不会导致恐慌?任何解释此概念的文档或博客文章?


神不在的星期二
浏览 126回答 1
1回答

杨__羊羊

这是一个类型断言,并记录在 Go 规范中:如果断言成立,则 ok 的值为真。否则它是假的并且 v 的值是类型 T 的零值。在这种情况下不会发生运行时恐慌。检查到位并且存在类型不匹配,该值将设置为 float32(数字)类型的“零”值,因此为 0。如果没有运行时检查,您应该绝对确定类型将匹配,并且规范规定如果不匹配就会发生恐慌。这种模式与基本错误检查没有什么不同,例如// v, err := someapi(). // Should check err ...v, _ := someapi() // deliberately ignore errorv.SomeMethod() // ... Panic as v probably nil if there was an error
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go