golang map

            map是go语言中的一种引用类型,所有它具备引用类型的特点,比如拷贝方式、需要初始化等等。map在go语言中通过key和value来访问,并且是无序的,也就是每次迭代的时候,顺序都不一样。

map定义

使用关键字map来定义一个map变量


func main() {

    //var m = map[int]string{1: "hello world"}
    m := make(map[int]string)
    m[1] = "hello world"
    fmt.Println(m)
}
 

初始化

和slice一样通过make关键字来初始化变量。map可以不传参数,而slice至少传一个,那就是长度。如果一个没有初始化的map是无法使用的。会直接触发panic

编译可以成功
PS C:UserscaojiaoyueDesktopgolang> go build PS C:UserscaojiaoyueDesktopgolang> .golang.exe panic: assignment to entry in nil map goroutine 1 [running]: main.main() C:/Users/caojiaoyue/Desktop/golang/main.go:11 +0x4a

操作key

添加key

func main() {

    var m map[int]string
    m = make(map[int]string)
    m[1] = "hello world"
    fmt.Println(m)
}

删除key

使用delete关键字,第一个参数要操作的map,第二个参数要删除的key

func main() {

    var m map[string]string
    m = make(map[string]string)
    m["1"] = "hello world"
    m["2"] = "hello world1"
    delete(m, "1")
    fmt.Println(m)
}

map迭代

使用range函数 返回的第一个参数是key,第二个函数是value

func main() {

    var m map[string]string
    m = make(map[string]string)
    m["1"] = "hello world"
    m["2"] = "hello world1"
    for k, v := range m {
        fmt.Println(k, v)
    }
}

判断某个key是否存在

key, ok := m["3"],如果存在ok为true,key就是这个map key对应的值
func main() {

    var m map[string]string
    m = make(map[string]string)
    m["1"] = "hello world"
    m["2"] = "hello world1"
    key, ok := m["3"]
    if !ok {
        fmt.Println("不存在")
    }
    fmt.Println(key)
}

map in map

需要注意的是里层的map初始化

func main() {

    var m map[int]map[string]string
    m = make(map[int]map[string]string)
    m[1] = make(map[string]string)
    m[1]["name"] = "caojioyue"
    m[1]["sex"] = "man"
    m[2] = make(map[string]string)
    m[2]["name"] = "caojioyue"
    m[2]["sex"] = "man"
    fmt.Println(m)
}

map in slice

func main() {
    var m []map[int]string
    m = make([]map[int]string, 2)
    m[0] = map[int]string{1: "caojiaoyue", 2: "hello"}
    fmt.Println(m)
}

slice in value of map

func main() {

    var m map[int][]string
    m = make(map[int][]string)
    m[1] = []string{"caojiaoyue", "hello"}
    m[2] = []string{"caojiaoyue", "hello"}
    fmt.Println(m)
}
原文地址:https://www.cnblogs.com/Nolover/p/12510406.html