声明并初始化地图
你可以使用关键字 map
定义地图,后跟其键的类型及其值:
// Keys are ints, values are ints.
var m1 map[int]int // initialized to nil
// Keys are strings, values are ints.
var m2 map[string]int // initialized to nil
地图是参考类型,一旦定义,它们的值为 nil
。写入 nil 贴图会发生混乱 ,读取将始终返回零值。
要初始化地图,请使用 make
功能:
m := make(map[string]int)
使用 make
的双参数形式,可以为地图指定初始条目容量,从而覆盖默认容量:
m := make(map[string]int, 30)
或者,你可以声明一个映射,将其初始化为零值,然后稍后为其分配一个文字值,这有助于你将结构编组为 json,从而在返回时生成一个空映射。
m := make(map[string]int, 0)
你还可以制作地图并使用大括号({}
)设置其初始值。
var m map[string]int = map[string]int{"Foo": 20, "Bar": 30}
fmt.Println(m["Foo"]) // outputs 20
以下所有语句都会导致变量绑定到相同的值。
// Declare, initializing to zero value, then assign a literal value.
var m map[string]int
m = map[string]int{}
// Declare and initialize via literal value.
var m = map[string]int{}
// Declare via short variable declaration and initialize with a literal value.
m := map[string]int{}
我们还可以使用地图文字来创建具有一些初始键/值对的新地图 。
键类型可以是任何类似的类型; 值得注意的是,这不包括函数,映射和切片 。值类型可以是任何类型,包括自定义类型或 interface{}
。
type Person struct {
FirstName string
LastName string
}
// Declare via short variable declaration and initialize with make.
m := make(map[string]Person)
// Declare, initializing to zero value, then assign a literal value.
var m map[string]Person
m = map[string]Person{}
// Declare and initialize via literal value.
var m = map[string]Person{}
// Declare via short variable declaration and initialize with a literal value.
m := map[string]Person{}