map
Go 语言中的 map(映射、字典)是一种内置的数据结构,它是一个无序的 key-value 对的集合,比如以身份证号作为唯一键来标识一个人的信息。
格式
map [keyType]valueType
在一个 map 里所有的键都是唯一的,而且必须是支持==和!=操作符的类型,切片、函数以及包含切片的结构类型这些类型由于具有引用语义,不能作为映射的键,使用这些类型会造成编译错误:。
map 值可以是任意类型,没有限制。map 里所有键的数据类型必须是相同的,值也必须相同,但键和值的数据类型可以不相同。
- 注意:map是无序的,我们无法决定它的返回顺序,所以,每次打印结果的顺利有可能不同。
map只有len,没有cap - 可以指定容量,系统会分配响应的内存给map,这样不需要在插入元素的时候在一个一个进行扩容,同时,超过指定的容量,map也会自动扩容。
- 键值一定是唯一的
map的创建
- 传统创建
- 通过make创建,并且可以指定长度
- 初始化
map的遍历
- 通过循环来进行遍历
- 如何判断一个key值是否存在:
value, ok := m3[0]
第一个返回值为key所对应的value,第二个返回值为key是否存在的条件,存在ok为true
map删除某一个key值
- 通过
delete(map,key)
可以删除map中指定key的元素。
map做函数参数—引用传递
结构体
有时我们需要将不同类型的数据组合成一个有机的整体,如:一个学生有学号/姓名/性别年龄/地址等属性。显然单独定义以上变量比较繁琐,数据不便于管理。
结构体是一种聚合的数据类型,它是由一系列只有相同类型或不同类型的数据构成的数据集合。每个数据称为结构体的成员。
语法
type Student struct {
id int
name string
sex byte
age int
addr string
}
结构体的初始化
- 顺序初始化,每个成员必须初始化
- 指定成员初始化,没有初始化为默认为0
结构体指针遍历初始化
加*
以及&
符即可
操作结构体成员
通过.
运算符来操作成员。
操作指针变量
- 只能使用
.
运算符 - 可以先定义一个普通结构体变量,在使指针变量保存结构体变量的地址,这样指针有了合法的指向以后在进行操作结构体成员;
- 也可以通过
new
来申请一个结构体,操作结构体成员
结构体的比较
如果结构体的全部成员都是可以比较的,那么结构体也是可以比较的,那样的话两个结构体将可以使用==
或!=
运算符进行比较,但不支持>
或<
。同类型的2个结构体变量可以相互赋值。
结构体做函数参数
值传递,形参无法改变
地址传递–形参可以改变实参
可见性
Go 语言对关键字的增加非常吝啬,其中没有private、protected、 public 这样的关键字。
要使某个符号对其他包(package)可见(即可以访问),需要将该符号定义为以大写字母开头。如果是小写,只能在同一个包里面使用。
结构体也是一样的
不同的包,想要操作别的包结构体的变量,也必须保证结构体成员的首字母是大写的。