icz*_*cza 7
TLDR;无论你的范围是什么,都会有一个副本(这是一般的“规则”,但有一个例外,见下文)。数组在 Go 中很少见,通常使用切片。切片值(切片标头)包含一个指向底层数组的指针,因此复制切片标头是快速、高效的,并且它不复制切片元素,不像数组。在这方面,遍历指向数组的指针类似于遍历切片。
xlen(x)
数组是值,它们不包含指向位于数组内存之外的数据的指针(与切片不同)。Go 博客:Go Slices:用法和内部结构:
Go 的数组是值。数组变量表示整个数组;它不是指向第一个数组元素的指针(就像在 C 中的情况一样)。这意味着当您分配或传递数组值时,您将复制其内容。(为了避免复制,你可以传递一个指向数组的指针,但那是指向数组的指针,而不是数组。)考虑数组的一种方法是一种结构,但带有索引而不是命名字段:一个固定的-size 复合值。
评估一个数组是整个数组的副本,它是所有元素的副本。规格:变量:
A[1] = 0(*A)[1] = 0
B[1] = 0Bvv
引擎盖下
for rangelen(x)
cmd/compile/internal/gc/range.go