1 回答
TA贡献1943条经验 获得超7个赞
该行:
*(*int)(nil) = 0
尝试取消引用nil指针并为其分配值,这始终是运行时恐慌。代码永远不会到达这一行,但是如果它无论如何都会到达(例如,将来发生错误的代码更改),它会恐慌,因此可以检测到错误并且不会被忽视。
在您的代码中做类似的事情也是常识,但使用更明显的“构造”,例如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")
}
}
请注意,在此示例中,这不仅是为了及早检测错误,也是一项要求,因为对于编译器来说,无法保证会到达 return 语句。您也可以将panic("unreachable")语句移到switch(而不是default分支)之后,这是一个口味问题。
如果您将上述函数更改为不返回但打印符号,则让default分支恐慌仍然是一个好习惯,尽管这不是此变体中的要求:
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 关注
- 187 浏览
添加回答
举报