声明并初始化地图

你可以使用关键字 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{}