Go 的 map 很像 javascript 的 object, ruby 的 hash , 我們很需要這種 key-value 的資料結構來讓我們的寫法更自由
以下敘述go的map的特性
int , float64 , string 等都可以作為鍵type Coordinate struct {
    X, Y int
}
剛剛有提到 map 不會自動初始化零值,故當沒有賦值時就是nil , 也就是map的零值就是nil, 當我們在對map的零值進行操作時,就會錯誤
var m map[string]int 
m["key"] = 1 // 這裡會引發 panic,因為 m 是 nil
所以我們要來談map的初始化
 type Person struct {
   FirstName string
   LastName  string
   Age       int
 }
// 使用 field: value 形式初始化      
 p := Person{
   FirstName: "John",
   LastName:  "Doe",
   Age:       30,
 }
const (
  StatusOK       = 0
  StatusCreated  = 1     
)
var data = map[int]string{
  StatusOK: "OK",
  StatusCreated: "created"
}
var map1[keytype]valuetype = make(map[keytype]valuetype)
// 簡寫
map1 := make(map[keytype]valuetype)
package main
import (
	"fmt"
)
func main() {
	score := make(map[string]int)
	score["tom"] = 60
	score["amy"] = 70
	for k, v := range score {
		fmt.Printf("[%d , %d]", k, v)
	}
	fmt.Println(score)
}
想查找 map 中的某個鍵是否存在時,或者想獲取與某個鍵相關聯的值,可以使用特殊的 "comma ok" 語法。這種語法允許你在一個操作中同時獲取值和確定鍵是否存在
value, ok := myMap[key]
所以我們就可以這樣使用
if !ok{
 //  "key"不存在
}
若我想要針對小於60的要刪除資料,我可以這樣做
func main() {
	score := make(map[string]int)
	score["tom"] = 50
	score["amy"] = 70
	for k, v := range score {
		if v < 60 {
			delete(score, k)
		}
	}
	fmt.Println(score)
}
以上是針對map先建立基礎