[Go] 数组, 切片的长度与容量

Posted October 12, 2021 by clannadzsy  ‐  1 min read

来源: Capacity and length of a slice in Go

数组

数组是具有**size**相同值的某个对象的索引集合**type**,声明为:

去数组

数组的属性

  • 数组有固定大小,不能调整大小。切片可以调整大小。
  • 数组的类型包括其大小。的[4]int数组类型是不同于[5]int,并且它们不能相比。
  • 初始化一个数组,var name [size]type创建一个size类型元素的集合,type每个元素都是给定的零值type
  • 数组按值传递。这意味着当您将一个数组分配给另一个数组时,您将制作其内容的新副本:

切片

var name []type

去切片

切片的属性

  • append()调用函数时,切片会自动调整大小。
  • 切片是不可比较的,简单的相等比较a == b是不可能的。查看如何比较切片
  • 用 初始化切片var name []type会创建一个nil长度和容量等于 0 且没有底层数组的切片。看看nil 和 empty slice 有什么区别
  • 就像数组(以及 Go 中的所有内容)一样,切片按值传递。当分配一个切片到一个新的变量,则ptrlen以及cap被复制,包括ptr指针将指向同一底层数组。如果修改复制的切片,则会修改相同的共享数组,这将使旧切片和新切片中的所有更改都可见: