• 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)
    }
  • 相关阅读:
    简述序列化与反序列化
    更新Kali源&&Docker vulhub 安装
    超级弱口令爆破工具&&hydra
    通达OA任意用户登录
    读书笔记——白帽子讲Web安全
    骑士CMS搭建与利用
    记一次DVWA的SQL注入测试
    网络基础
    C#类对象的事件定义
    [开源]FreeSCADA的通道数据与控件属性关联以及自动刷新机制研究
  • 原文地址:https://www.cnblogs.com/Nolover/p/12510406.html
Copyright © 2020-2023  润新知