映射
正文
對一個結構體進行映射,即結構體是其值,這裏定義鍵的類型爲string。
package main
import "fmt"
type Vertex struct {
Lat, Long float64
}
var m = map[string]Vertex{
"Bell Labs": Vertex{
40.68433, -74.39967,
},
"Google": Vertex{
37.42202, -122.08408,
},
}
func main() {
fmt.Println(m)
}
// 輸出
map[Bell Labs:{40.68433 -74.39967} Google:{37.42202 -122.08408}]
可以縮寫爲:
var m = map[string]Vertex{
"Bell Labs": {40.68433, -74.39967},
"Google": {37.42202, -122.08408},
}
就是可以把結構體名省略。
操作
package main
import "fmt"
func main() {
m := make(map[string]int)
m["Answer"] = 42
fmt.Println("The value:", m["Answer"])
m["Answer"] = 48
fmt.Println("The value:", m["Answer"])
delete(m, "Answer")
fmt.Println("The value:", m["Answer"])
v, ok := m["Answer"]
fmt.Println("The value:", v, "Present?", ok)
}
map有增刪查改操作。
- 對於一個鍵沒有其值,相當於插入。
- 對於一個鍵若有其值,相當於修改。
- 訪問鍵的時候,可帶一個bool變量來判斷是否存在
這個是很重要的,不論什麼時候都要知道一個東西是否可訪問,然後在讀寫,不然容易出現問題。當然map寫是隨意的,所以沒有問題。但是go語言可缺省判斷操作的便利性一定會被不良程序員濫用導致有錯誤風險。