Golang处理nil指针异常

Swo*_* GF 2 pointers go

请考虑以下代码:

list := strings.Split(somestring, "\n")
Run Code Online (Sandbox Code Playgroud)

假设这会返回三个元素的列表或切片.然后,如果您尝试访问切片范围之外的内容:

someFunction(list[3])
Run Code Online (Sandbox Code Playgroud)

由于nil指针,程序可能会崩溃.在Golang中是否有某种方法来处理nil指针异常,以便程序不会崩溃并且可以适当地做出响应?

One*_*One 9

你不能在Go中做到这一点,你甚至不应该这样做.

总是检查你的变量和切片,每当你尝试在切片或阵列上使用未经检查的索引时,上帝会杀死一只小猫,我喜欢小猫,所以我个人接受它.

解决它非常简单,例如:

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))
}
Run Code Online (Sandbox Code Playgroud)

  • 毫无例外的教条对优雅的失败非常有害。您不能只是“始终检查变量”。错误不可避免地会发生,并且主张人们不为此做好准备是荒谬的。 (3认同)

che*_*eng 1

Go 有恐慌恢复语句,它的工作方式类似于 java 或 c# 中的异常

请参阅http://blog.golang.org/defer-panic-and-recover

访问 nil 指针会导致恐慌,如果你不使用恢复来捕获它,应用程序将会崩溃。

但是 go 不鼓励使用panic/recover来处理这些异常,你可能应该在使用它之前检查指针是否为nil。