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
}
问题:
- 为什么Go中的
nil不会自动创建空结构(与某些语言中的null不同)? - 如何在使用指针之前正确检查
nil?