数组:
定义:golang中的数组和C语言中的数组是相似的,在 Go 语言中数组是固定长度的数据类型,它包含相同类型的连续的元素,这些元素可以是内建类型,像数字和字符串,也可以是结构类型,元素可以通过唯一的索引值访问,从 0 开始。
数组是很有价值的数据结构,因为它的内存分配是连续的,内存连续意味着可是让它在 CPU 缓存中待更久,所以迭代数组和移动元素都会非常迅速。
使用方式: 1. 基本定义:
2. 快速定义
3. 直接复制一整个数组
4. 函数中使用数组一般是使用指针,不然的话类似一个100万的数组,每次使用都要调用8M的内存
SLICE:
定义:slice 是一种可以动态数组,可以按我们的希望增长和收缩。它的增长操作很容易使用,因为有内建的 append 方法。我们也可以通过 relice 操作化简 slice。因为 slice 的底层内存是连续分配的,所以 slice 的索引,迭代和垃圾回收性能都很好。
slice 是对底层数组的抽象和控制。它包含 Go 需要对底层数组管理的三种元数据,分别是:
- 指向底层数组的指针
- slice 中元素的长度
- slice 的容量(可供增长的最大值)
切片长度和容量的区别:
- 切片拥有长度和容量。
- 切片的长度是它所包含的元素个数。
- 切片的容量是从它的第一个元素开始数,到其底层数组元素末尾的个数。
- 切片 s 的长度和容量可通过表达式 len(s) 和 cap(s) 来获取。
- 大概能理解容量和长度的大概意思是,
初始化方式:
-
默认定义方式,如果只指定了长度,那么容量默认等于长度。
-
定义长度和容量
-
正常slice,使用apend函数,容量足够的话,那么就会在原有的内存上增加,但是如果容量不足的,就会从新分配一个新的地址空间
map结构:
定义:简单的说就是一个类似php的字典,每个key对应一个value,他的特定是他是无序的,不会按照你的存入顺序而排序,它也可以迭代。
定义方式:
- make方法定义和其他使用:=方法一样直接定义
|
请发表评论