Go基础-map

xuheazx · · 3029 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

// xuhh_go_map project
/*
1.map的特点:
    a.map是go语言的内置引用类型,所以多个map指向同一个底层的情况下,一个值发生变化,全部发生变化
    b.map是无序的,每次迭代的顺序都是不确定的。
    c.map只有 len 没有 cap。
    d.map不是线程安全的,在多个go-routine中使用的时候,要加锁。
    e.map[key]value
        key 必须支持 运算符(== 、!= )的操作,例如 number/string/pointer/array/struct/interface
        value 可以是任意类型。
2.map的创建:
    a. new 进行创建
        mapA := new(map[int]string)
        *mapA = map[int]string{}
        (*mapA)[112] = "112"
        (*mapA)[110] = "110"
    b.直接声明创建
        var map1 map[int]string = map[int]string{}
        map2 := map[int]string{
            11: "11",
            12: "12",
            13: "13",
        }
    c.make进行创建
        map3 := make(map[int]string, 1000) // 1000 是map的容量 ,这点和slice是一样的,预先申请一块内存,避免以后频繁扩张,提升性能
3.map 的一些基本操作
    a.判断键值是否存在
        if v, ok := map1[5]; ok == true {
            fmt.Println("this key is exit ", v)
        } else {
            fmt.Println("this key is not exit ")
        }
    b.增加
        map[key] = value
    c.修改
        map 在修改value的时候
            如果value是值类型,要想改变值,需要全部替换(value 换 value)
            如果是引用类型,则可以直接赋值替换
        mapS := map[string]PERSON{}
        mapS["xuhh"] = PERSON{name: "xuhh", old: 26}
        mapS["xuhh"].name = "xuhehe" // error  cannot assign to mapS["xuhh"].name
    d.删除
        可以在迭代的时候安全删除键值对
        delete(map, key)
    e.迭代遍历
        for k, v := range map {
            fmt.Println("key = ", k, "value = ", v)
        }
*/

package main

import (

    "fmt"

)

type PERSON struct {

    name string

    old  int

}

func main() {

    //new 进行创建

    mapA := new(map[int]string)

    *mapA = map[int]string{}

    (*mapA)[112] = "112"

    (*mapA)[110] = "110"

    for v := range *mapA {

        fmt.Println(v)

    }

    //直接创建,可以直接初始化:

    var map1 map[int]string = map[int]string{}

    map2 := map[int]string{

        11: "11",

        12: "12",

        13: "13",

    }

    fmt.Println(map2)

    map1[2] = "222"

    map1[3] = "333"

    map1[1] = "111"

    map1[6] = "666"

    map1[8] = "888"

    map1[5] = "555"

    fmt.Println(map1)

    // make 创建

    map3 := make(map[int]string, 1000)

    map3[22] = "22"

    fmt.Println(map3)

    // map 的操作

    // 查找

    if v, ok := map1[5]; ok == true {

        fmt.Println("this key is exit ", v)

    } else {

        fmt.Println("this key is not exit ")

    }

    //add

    map1[5] = "exit"

    fmt.Println(map1[5])

    //modify

    mapS := map[string]PERSON{}

    mapS["xuhh"] = PERSON{name: "xuhh", old: 26}

    //mapS["xuhh"].name = "xuhehe" // error  cannot assign to mapS["xuhh"].name

    //map 在操作value 的时候,如果value 是 值类型 ,要想改变值,需要全部替换(value 换 value),如果不是引用类型,则可以直接赋值替换

    //delete

    delete(map1, 5)

    if _, ok := map1[5]; !ok {

        fmt.Println("this key is deleted")

    }

    //迭代遍历

    for k, v := range map1 {

        fmt.Println("key = ", k, "value = ", v)

    }

}






						

有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:xuheazx

查看原文:Go基础-map

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3029 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传