返回
Golang slice原理浅析(下)
后端
2023-10-30 17:45:15
## Golang slice 内存模型
### slice 本质
slice 本质上是一个数据结构,它包含一个指向底层数组的指针、数组的长度和数组的容量。
### slice 内存模型图
<center><img src='https://tva1.sinaimg.cn/large/006tNc79ly1h1gw6pv36mj30zk0ns41v.jpg'></center>
slice 数据结构
1. 结构体
type slice struct {
array unsafe.Pointer // 指向底层数组的指针
len int // 数组的长度
cap int // 数组的容量
}
2. 解读
- unsafe.Pointer:这是一个不安全的指针,它可以指向内存中的任何位置。
- len:数组的长度,表示 slice 中有多少个元素。
- cap:数组的容量,表示 slice 可以容纳多少个元素。
Golang slice 操作方法
1. make
func make([]T, len, cap) []T
- make([]T, len, cap) 函数可以创建一个新的 slice。
- T 是 slice 中元素的类型。
- len 是 slice 的长度。
- cap 是 slice 的容量。
2. append
func append(s []T, elems ...T) []T
- append 函数可以将一个或多个元素添加到 slice 的末尾。
- s 是要添加元素的 slice。
- elems 是要添加的元素。
3. copy
func copy(dst, src []T) int
- copy 函数可以将 src slice 中的元素复制到 dst slice 中。
- dst 是要复制元素的目标 slice。
- src 是要复制元素的源 slice。
4. len
func len(s []T) int
- len 函数可以返回 slice 的长度。
- s 是要获取长度的 slice。
5. cap
func cap(s []T) int
- cap 函数可以返回 slice 的容量。
- s 是要获取容量的 slice。
总结
本文对 Golang slice 的原理进行了深入剖析,从内存模型、数据结构和操作方法三个方面详细介绍了 slice 的实现原理,帮助读者更好地理解和使用 slice。