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先建立基礎