映射 (map) 作为一个常用的类型,Go语言已为我们开发者内置了map类型。
基本语法:
var 变量名 map [keyT类型] valueT类型
这里T就是一个类型代表(我这么写,有点受到了Java的泛型影响),key的类型通常为string或int类型,但slice切片类型,map映射类型 及 function函数类型 是无法作为key类型的。另外,map的key和value都是无序的,或许可能因为go设计出的map的key应该是散列的原因。(边学边猜不违法,错了无妨,改就是了。)
map的三种创建方式:
方式1:先用定义一个map ,初始默认值为nil,然后make函数赋值,然后再通过逐一操作key,给其初始化添加条目。
var a map[int]string //初始默认值为nil
fmt.Println(nil == a)
a = make(map[int]string, 2) //初始分配10个entry条目容量capactiy大小,非实际条目数量。
a[0] = "0.."
a[1] = "1.."
a[2] = "2.."
a[3] = "3.."
fmt.Println(a)
方式2:自动类型推断,也可以不传入初始条目容量
//方式2:类型推断,可不用传入初始条目容量大小。
a := make(map[int]string, 2)
fmt.Println(nil == a) // false
fmt.Println(len(a)) // len = 0
a[0] = "0.."
a[1] = "1.."
a[2] = "2.."
a[3] = "3.."
fmt.Println(a)
方式3:定义声明并同时初始化。(最后的条目3...末尾的逗号不可省略。)
var c map[int]string = map[int]string{
1: "1..",
2: "2..",
3: "3..", //(最后的条目3...末尾的逗号不可省略。)
}
map 的增删改查 及遍历
package main
import (
"fmt"
)
func main() {
var m map[int]string = map[int]string{
1: "1..",
2: "2..",
3: "3..",
}
//增
m[4] = "4...add.."
//删 从m中,删除key=1的条目entry
delete(m, 1)
fmt.Println("after delete, 映射 m =>", m)
//改
m[4] = "4.."
//查
value, flag := m[4]
fmt.Println(value)
fmt.Println(flag)
//查看map实际元素数量。
fmt.Println("map的实际元素数量 => ", len(m))
//遍历 map的遍历唯一方式 for range 遍历。
for k, v := range m {
println(k, ":", v)
}
//清空
m = make(map[int]string)
}
至此GO语言入门系列帖子全部写完了,自从2022年11月16号开始写,写到2022年11月19日入门封版 ,以一个很粗暴的方式,把Go语言入门了一遍,一共17篇帖子是这段时间的学习和心得的笔记,希望能帮助到自己的同时也能帮助到大家。愿这这些努力,都没有白费;愿将来的自己感谢今日的自己。
加油,Go Go!