package main
func main() {
m := map[string]map[string]string{}
println(m == nil) //false
println(m["hello"] == nil) //true,因为m := map[string]map[string]string{}只初始化了第一层map,第二层map依然是nil
m1 := m["hello"]
if m1 == nil {
m1 = map[string]string{}
println(m["hello"] == nil) //true,虽然map是浅复制,m1 := m["hello"]后对m1的内容修改就等同于对m["hello"]的内容修改,但是m1 = map[string]string{}是相当于将另一个map的引用赋值给m1了,所以m1是什么就跟m["hello"]无关了,这个跟C++和Java同理
m1["hello"] = "world"
println(m["hello"]["hello"]) //什么也没输出,与上一段注释同理
}
if m["world"] == nil {
m["world"] = map[string]string{}
}
m2 := m["world"]
m2["hello"] = "world"
println(m["world"]["hello"])//world,因为map是浅复制,所以m2 := m["world"]后对m2的内容修改就等同于对m["world"]的内容修改
}
Golang map浅复制和嵌套初始化
最新推荐文章于 2024-04-15 07:51:25 发布