go之map

什么是map  

  map是在Go中将值(value)与键(key)关联的内置类型,通过相应的键可以获取到值

map的定义

  是引用类型,需要初始化,如果不初始化就说nil

1
2
3
4
5
6
7
8
9
10
package main
 
import "fmt"
 
func main() {
    //var m map[key值类型]value类型
    //make 初始化,不需要写数字---》数字有点用
    var m map[string]string=make(map[string]string)
    fmt.Println(m)  //map[]
}

取值和赋值 

1
2
3
4
5
6
7
8
9
10
11
12
package main
 
import "fmt"
 
func main() {
    var m map[string]string=make(map[string]string)
    fmt.Println(m)  //map[]
    m["name"]="zys"
    m["age"]="19"
    fmt.Println(m)  //map[age:19 name:zys]
 
}

定义并赋值

1
2
3
4
5
6
7
8
package main
 
import "fmt"
 
func main() {
    var m map[string]string=map[string]string{"name":"zys","age":"19"}
    fmt.Println(m)  //map[age:19 name:zys]
}

定义了不初始化是nil

  引用类型,当参数传递

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package main
 
import "fmt"
 
func main() {
    var m map[string]string
    fmt.Println(m) //map[] nil,控制台打印出来的样子,本质是nil
    var m1 map[string]string = make(map[string]string)
    fmt.Println(m1) //map[]  不是nil,完全不一样
    if m == nil {
        fmt.Println("m是nil") //m是nil
    }
    if m1 == nil {
        fmt.Println("m1是nil")
    }
}

获取不存在的元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package main
 
import "fmt"
 
func main() {
    var m map[string]string=map[string]string{"name":"zys","age":"19"}
    fmt.Println(m)
    fmt.Println(m["name"])
    fmt.Println("---",m["hobby"])  //不会报错,返回 value的0值--》""
    //因为不同类型0值是不一样的,后期我们没法通用的判断值是否存在
    //取值,无论存在不存在都可以
    v,ok:=m["hobby"]
    //v,ok:=m["name"]
    fmt.Println(v)
    fmt.Println(ok)
    if v,ok:=m["hobby"];ok{
        fmt.Println(v)
    }
}

赋值

  存在就更新,不存在就新增

1
2
3
4
5
6
7
8
9
10
package main
 
import "fmt"
 
func main() {
    var m map[string]string=map[string]string{"name":"zys","age":"19"}
    m["name"]="xxx"
    m["hobby"]="篮球"
    fmt.Println(m)  //map[age:19 hobby:篮球 name:xxx]
}

删除map元素

  内置函数delete

1
2
3
4
5
6
7
8
9
10
11
12
package main
 
import "fmt"
 
func main() {
    var m map[string]string=map[string]string{"name":"zys","age":"19"}
    m["name"]="xxx"
    m["hobby"]="篮球"
    fmt.Println(m)  //map[age:19 hobby:篮球 name:xxx]
    delete(m,"name")
    fmt.Println(m)  //map[age:19 hobby:篮球]
}

map是引用类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package main
 
import "fmt"
 
func main() {
    var m map[string]string=map[string]string{"name":"zys","age":"19"}
    testM(m)
    fmt.Println(m)  //map[age:19 hobby:足球 name:lll]  存在类似于切片的坑,在函数内部增加元素的坑,只要函数中改就会影响原来的
}
func testM(m map[string]string)  {
    m["hobby"]="足球"
    m["name"]="lll"
    fmt.Println(m)  //map[age:19 hobby:足球 name:lll]
 
}

 

map==的使用

  map之间不能使用==操作符判断,==只能用来检查map是否为nil,值类型才允许==比较,引用类型不允许==比较,只能用==和nil比较

posted @   那就凑个整吧  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示