go lang map 不抛出空指针

Raj*_*esh -1 go

为什么这个程序不会恐慌?

package main

import "fmt"

func main() {
    m := make(map[string]string)
    m["test"] = "test"
    delete(m, "tes1t")

    m = nil
    fmt.Println("End")
    fmt.Println(m["test"])
}
Run Code Online (Sandbox Code Playgroud)

https://go.dev/play/p/37reql6Pdb5

尽管如此mnil仍然可以阅读 中的项目m

Roo*_*adi 6

查看这个代码片段:

package main

import "fmt"

func main() {
    var m map[string]string = nil
    fmt.Println(m) // output: "map[]"

}
Run Code Online (Sandbox Code Playgroud)

这是预期的行为,因为nil对于许多类型的变量(包括(但不限于)映射切片)充当零值。

另外,Golang 中不存在“异常”这样的东西。您可以使用以下语法检查映射中是否存在值:

value, found := m["key"]
Run Code Online (Sandbox Code Playgroud)

其中found变量指示该值是否存在于映射中。