请考虑以下代码:
list := strings.Split(somestring, "\n")
让我们说这会返回三个元素的列表或切片。然后,如果您尝试访问切片范围之外的内容:
someFunction(list[3])
由于nil指针,程序可能会崩溃。在Golang中是否有某种方法来处理nil指针异常,以便程序不会崩溃并且可以恰当地做出响应?
答案 0 :(得分:7)
你不能在Go中这样做,即使你可以也不应该这样做。
总是检查你的变量和切片,每当你尝试在切片或阵列上使用未经检查的索引时,上帝会杀死一只小猫,我喜欢小猫,所以我个人接受它。
解决问题非常简单,example:
func getItem(l []string, i int) (s string) {
if i < len(l) {
s = l[i]
}
return
}
func main() {
sl := []string{"a", "b"}
fmt.Println(getItem(sl, 1))
fmt.Println(getItem(sl, 3))
}
答案 1 :(得分:0)
Go有恐慌恢复语句,它像java或c#
中的异常一样工作请参阅http://blog.golang.org/defer-panic-and-recover
访问nil指针会引起恐慌,如果你不使用recover来捕获它,应用程序就会崩溃。
但是不鼓励使用恐慌/恢复来处理这些异常,你可能应该在使用它之前检查指针是否为零。