07. Go极简教程 map的基础使用

map的声明

package main
import "log"
// Vertex 大写开头的为Public对象, 必须写注释说明, golint会做检测
type Vertex struct {
    Lat, Long float64
func main() {
    // 使用 make 声明一个map, 键为string, 值为Vertex类型
    var m = make(map[string]Vertex)
    m["dog"] = Vertex{50, 100}
    log.Println(m)        //map[dog:{50 100}]
    log.Println(m["dog"]) //{50 100}
    // 也可使用有初始值的map[k]v声明
    var m2 = map[string]Vertex{
        "dog": Vertex{100, 150},
        "cat": {200, 250}, // 可以忽略结构体的类型名
    m2["fish"] = Vertex{300, 350}
    log.Println(m2) // map[fish:{300 350} dog:{100 150} cat:{200 250}]

map的操作

package main
import (
    "log"
// Vertex 大写开头的为Public对象, 必须写注释说明, golint会做检测
type Vertex struct {
    Lat, Long float64
func main() {
    // 也可使用有初始值的map[k]v声明
    var m = map[string]Vertex{
        "dog": {100, 150},
        "cat": {200, 250},
    // 插入或修改元素
    m["fish"] = Vertex{300, 350}
    // 获取元素, ok是来检测对象是否存在
    var ele, ok = m["fish"]
    log.Println(ele, ok) //Vertex{300, 350}, true
    ele2, ok := m["monkey"]
    log.Println(ele2, ok) //Vertex{0, 0}, false
    // 删除
    delete(m, "fish")
    // 合并map
    m2 := map[string]Vertex{
        "dog2": {1000, 1500},
        "cat2": {2000, 2500},
    for k, v := range m2 {
        m[k] = v
    // map遍历
    for k, v := range m {
        log.Println("key:", k, "value:", v)
    log.Println(m)