GO 使用嵌套map应该多次分配空间

GO 使用嵌套map应该多次分配空间


demo


package main

import (
	"fmt"
)

func main() {

	// 初始化一个map
	var tmp map[int64]interface{}
	//tmp[1] = "abc" // panic:assignment to entry in nil map ;必须使用make分配空间
	tmp = make(map[int64]interface{})
	tmp[1] = "123"

	// 一般不使用上面复杂写法,直接声明赋值
	var m1 = make(map[int64]interface{})
	m2 := make(map[int64]interface{}) // uber go语言编码规范 推荐使用局部变量写法
	m3 := map[int64]interface{}{}     // 字面量直接赋值

	// 使用嵌套map
	hs := make(map[int64]map[string]interface{})
	//hs[1]["name"] = "张三" // 这么做会panic, 因为 make() 只为最外部的map分配了空间

	// 正确写法1
	//hs[1] = make(map[string]interface{})
	//hs[1]["name"] = "张三"

	// 正确写法2
	hs[1] = map[string]interface{}{}
	hs[1]["name"] = "张三"
	// ...

	fmt.Println(m1, m2, m3, hs)

}

posted @ 2022-12-27 15:43  等你下课啊  阅读(244)  评论(0)    收藏  举报