Go 中是否使用make创建slice的区别

go slice 的make 会创建默认长度 且值为0 的slice

在 Go 语言中,可以使用 make 函数来创建切片(slice)。切片是一种动态数组,它可以在运行时动态增长或缩小。以下是使用 make 和不使用 make 创建切片的主要区别:

使用 make 创建切片:

1
2
// 使用 make 创建切片,指定长度和容量 
slice := make([]int, 5, 10)
  1. 指定长度和容量: 使用 make 创建切片时,您需要明确指定切片的长度和容量。长度是切片当前包含的元素数量,容量是底层数组的大小,通常大于或等于切片的长度。指定容量可以提高性能,因为它可以减少重新分配内存的次数。

  2. 底层数组初始化: 使用 make 创建切片时,它会自动初始化底层数组,将切片的元素都设置为其类型的零值。在上面的示例中,slice 是一个包含5个零值整数的切片。

不使用 make 创建切片:

1
2
// 不使用 make 创建切片,长度为 5 
slice := []int{1, 2, 3, 4, 5}

`

  1. 自动确定长度: 不使用 make 创建切片时,切片的长度会根据提供的元素数量自动确定。在上面的示例中,slice 的长度是5,因为提供了5个整数。

  2. 容量与长度相同: 如果不使用 make 创建切片,切片的容量将与长度相同,因为底层数组的大小会与切片的长度相匹配。

总结:

  • 使用 make 创建切片时,您可以明确控制切片的容量,并按长度初始化为0值,适用于需要精确控制内存分配的情况,或者在预先知道切片的最大长度时。
  • 不使用 make 创建切片时,适用于快速创建切片并根据提供的元素自动确定长度的情况。这种方式更简洁,适合大多数情况。

无论使用哪种方式创建切片,都可以使用 append 函数来动态增长切片的长度。


Go 中是否使用make创建slice的区别
https://leiqi.top/2023-10-05-9d3185fd2258.html
作者
Lei Qi
发布于
2023年10月5日
许可协议