与数组的区别
- 数组是固定长度的,而分片确实可动态增长的,以定义为例:
1 | // 定义数组, 一定要指定长度 |
- 在函数调用时, 数组是值传递,而分片是引用传递
其实对于 golang
来讲,函数调用的时候都是值传递,拷贝一个副本, 之所以表现为值传递和引用传递,在于一个拷贝的是数据值,另一个拷贝的是数据指针,两个指针值指向的是同一个内存地址。
分片的实现
分片的底层数据还是使用的数组,它一共包含 3 个字段:
- 地址指针
- 长度
- 容量
1 | // source 是一个分片, 大小为 4, 容量为: 5 |
在使用 append
来为分片添加数据时, 是否有内存分配很重要
当 append
没有内存分配时:
1 | source := []string{"1", "2", "3", "4", "5"} |
输出:
1 | [1 2 3 4 5] |
当 append
有内存分配时:
1 | source := []string{"1", "2", "3", "4", "5"} |
输出:
1 | source--> [1 2 3 4 5] |