宣告並初始化地圖

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