返回

Golang slice原理浅析(下)

后端

## 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。