Golang map浅复制和嵌套初始化

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"]的内容修改
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值