package main
import (
"fmt"
)
func main() {
fmt.Println("---------------map test")
var map1 map[int]string
fmt.Println("map1:", map1)
fmt.Printf("%p\n", &map1)
// map1[1] = "hello"
// 不可直接使用,需要使用make分配内存后再使用,会报错panic: assignment to entry in nil map
var map2 map[string]string
map2 = make(map[string]string, 10)
map2["name"] = "scf"
fmt.Println("map2:", map2)
// 第二种声明方式
map3 := make(map[string]string)
map3["name"] = "beijing"
fmt.Println("map3:", map3)
// 第三种声明方式
map4 := map[string]string {
"name" : "shanghai",
}
fmt.Println("map4:", map4)
// map 的增删改查
m1 := make(map[string]string)
m1["name"] = "m1"
fmt.Println("m1:", m1)
m1["name"] = "new_m1"
fmt.Println("m1:", m1)
// 通过key来操作时,如果map中原来没有这个key,那么是增加值,否则就是修改值
/*
m1: map[name:m1]
m1: map[name:new_m1]
*/
// delete 删除,如果被删除的key不存在,也不报错
/*
m1: map[]
m1: map[]
*/
delete(m1, "name")
fmt.Println("m1:", m1)
delete(m1, "name")
fmt.Println("m1:", m1)
// 查找
/*
have no key=test,value:
have key=test,value: value_test
*/
value, ok := m1["test"]
if ok {
fmt.Println("have key=test,value:", value)
} else {
fmt.Println("have no key=test,value:", value)
}
m1["test"] = "value_test"
value1, ok1 := m1["test"]
if ok1 {
fmt.Println("have key=test,value:", value1)
} else {
fmt.Println("have no key=test,value:", value1)
}
// 遍历,使用for range
m2 := make(map[string]string)
m2["name"] = "name_value"
m2["addr"] = "addr_value"
m2["age"] = "age_value"
m2["color"] = "color_value"
m2["sex"] = "sex_value"
for k,v := range m2 {
fmt.Println("k:", k, "\tv:", v )
}
/*
// map是无序的,没有下标的概念
k: addr v: addr_value
k: age v: age_value
k: color v: color_value
k: sex v: sex_value
k: name v: name_value
*/
// map 切片:本质是一个切片,切片的每个元素都是map
sli1 := make([]map[string]string, 2)
if sli1[0] == nil {
fmt.Println("sli1[0] is nil")
sli1[0] = make(map[string]string, 2)
sli1[0]["name"] = "name_value"
sli1[0]["age"] = "age_value"
} else {
fmt.Println("sli1[0] is not nil")
}
fmt.Println("sli1:", sli1)
/*
sli1[0] is nil
sli1: [map[age:age_value name:name_value] map[]]
*/
}
GO_map
最新推荐文章于 2022-03-20 22:13:51 发布