Avatar ·

Go中的null/nil是什么以及如何处理它?

大家好!我开始学习Go,遇到了nil这个概念。在其他语言(如Java或JavaScript)中,有null,它经常导致错误(NullPointerException)。在Go中,据我所知,使用的是nil,但行为有所不同。

以下是我尝试过的代码:

package main

import "fmt"

func main() {
    var p *int
    fmt.Println(p) // 输出 nil
    // fmt.Println(*p) // panic: runtime error: invalid memory address or nil pointer dereference
    
    var s []int
    fmt.Println(s == nil) // true
    fmt.Println(len(s))   // 0
    // s[0] = 1 // panic
    
    var m map[string]int
    fmt.Println(m == nil) // true
    // m["key"] = 1 // panic
}

问题:

  1. 为什么Go中的nil不会自动创建空结构(与某些语言中的null不同)?
  2. 如何在使用指针之前正确检查nil?