携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第10天,点击查看活动详情
golang复合数据类型
前文
前文曾讨论过golang的基础类型,本文从个人的角度对golang的复合数据类型进行总结。内容主要为个人的理解,依然存在不足之处。
数组
数组的长度是固定的,需要在声明数组阶段直接进行数组长度的指定。如果想获取数组中的元素或更新数组中的元素,直接通过数组的下角标进行操作。而获取数组元素个数则采用len函数进行获取。
下面看一下数组初始化的几种方式:
var a [3]int //直接初始化为默认值
var q [3]int = [3]int{1, 2, 3} //直接初始化为实际值
q := [...]int{1, 2, 3} //省略数组长度,自动进行长度计算
slice切片
切片相对数组来说,是一个可变长度的数据结构,结构中每个元素也是同样的数据类型。slice的底层是数组,一个数组可以共享出多个切片,而这些切片采用相同的底层数组,当数组变化或切片变化时,其他的切片和数组本身也会收到影响。切片的元素个数用len获取,而切片的容量cap则表示由第一个元素到数组末尾元素的总个数。
使用append可以对切片进行元素的新增。当切片空间不足时,会进行翻倍处理并进行内存的重新分配,采用其他的内存空间。而当切片空间足够时,同样会对底层数组进行修改。
而当slice采用make进行初始化时,则没有对应的底层数组,会重新分配空间作为底层数组。
map
map是无序的key、value结构,通过key值进行查找。所有的key必须采用相同的类型,所有的value也是相同的类型。初始化时采用make操作或直接进行元素指定:
ages := make(map[string]int)
ages := map[string]int{
"a": 31,
"b": 34,
} //直接指定元素值
map[string]int{} //创建空的map
而操作元素时直接通过key访问元素即可:
ages["a"] = 32
delete(ages,"b")
后记
- 千古兴亡多少事?悠悠。不尽长江滚滚流。