1 回答

TA貢獻(xiàn)1943條經(jīng)驗(yàn) 獲得超7個贊
該行:
*(*int)(nil) = 0
嘗試取消引用nil指針并為其分配值,這始終是運(yùn)行時恐慌。代碼永遠(yuǎn)不會到達(dá)這一行,但是如果它無論如何都會到達(dá)(例如,將來發(fā)生錯誤的代碼更改),它會恐慌,因此可以檢測到錯誤并且不會被忽視。
在您的代碼中做類似的事情也是常識,但使用更明顯的“構(gòu)造”,例如panic("unreachable"). 例如:
func sign(a int) string {
switch {
case a > 0:
return "Positive"
case a < 0:
return "Negative"
case a == 0:
return "Zero"
default:
panic("unreachable")
}
}
請注意,在此示例中,這不僅是為了及早檢測錯誤,也是一項(xiàng)要求,因?yàn)閷τ诰幾g器來說,無法保證會到達(dá) return 語句。您也可以將panic("unreachable")語句移到switch(而不是default分支)之后,這是一個口味問題。
如果您將上述函數(shù)更改為不返回但打印符號,則讓default分支恐慌仍然是一個好習(xí)慣,盡管這不是此變體中的要求:
func printSign(a int) {
switch {
case a > 0:
fmt.Println("Positive")
case a < 0:
fmt.Println("Negative")
case a == 0:
fmt.Println("Zero")
default:
panic("unreachable")
}
}
- 1 回答
- 0 關(guān)注
- 225 瀏覽
添加回答
舉報(bào)