Go 声明和初始化map

示例

您可以使用关键字定义映射map,后跟关键字的类型和值:

// 键是整数,值是整数。
var m1 map[int]int // 初始化为nil

// 键是字符串,值是整数。
var m2 map[string]int // 初始化为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"]) // 输出20

以下所有语句导致该变量绑定到相同的值。

// 声明,初始化为零值,然后分配一个文字值。
var m map[string]int
m = map[string]int{}

// 通过文字值声明和初始化。
var m = map[string]int{}

// 通过简短的变量声明进行声明,并使用文字值进行初始化。
m := map[string]int{}

我们还可以使用映射文字来创建带有一些初始键/值对的新映射。

密钥类型可以是任何可比较的类型。值得注意的是,这不包括函数,映射和切片。值类型可以是任何类型,包括自定义类型或interface{}。

type Person struct {
    FirstName string
    LastName  string
}

// 通过简短的变量声明进行声明,并使用make进行初始化。
m := make(map[string]Person)

// 声明,初始化为零值,然后分配一个文字值。
var m map[string]Person
m = map[string]Person{}

// 通过文字值声明和初始化。
var m = map[string]Person{}

// 通过简短的变量声明进行声明,并使用文字值进行初始化。
m := map[string]Person{}