如何在go中找到数组的大小

Rev*_*nda 7 arrays go

我尝试过len()函数,但它给出了声明的值.该size()函数给出了错误.

码:

package main
var check [100]int
func main() {
    println(len(check))
}
Run Code Online (Sandbox Code Playgroud)

输出在100这里,我需要数组中的总项目(即0).

icz*_*cza 24

Go中的数组是固定大小的:一旦在Go中创建数组,以后就无法更改其大小.这在某种程度上是指数组的长度是数组类型的一部分(这意味着类型[2]int并且[3]int是2种不同的类型).也就是说,某些数组类型的值的长度始终相同,并且由其类型决定.例如,类型的数组值的长度[100]int始终为100(可以使用内置函数查询len()).

规格:数组类型:

长度是数组类型的一部分; 它必须求值为可由类型值表示的非负常量int.a可以使用内置函数len发现数组的长度.

如果您正在寻找"已设置了多少元素?"的答案,则不会在Go中跟踪.您正在寻找的"数组中的总项目"也始终与数组长度相同:在Go中创建数组时,数组中的所有元素都将初始化为元素类型的零值(除非另有说明)例如,通过使用复合文字).

例如在这一行之后:

var arr [100]int
Run Code Online (Sandbox Code Playgroud)

数组arr已经有100 int秒,都是0(因为这是类型的零值int).在以下行之后:

var arr2 = [3]int{1, 2, 3}
Run Code Online (Sandbox Code Playgroud)

该阵列arr2具有3个int元素,是1,23.并在以下行之后

var arr3 = [...]bool{3: true}
Run Code Online (Sandbox Code Playgroud)

阵列arr3有4个bool元素,感false,false,falsetrue(false是类型的零值bool,我们只指定的第四元件是true其在索引3).

如果您询问切片,您的问题可能会有更多意义:

切片是底层数组的连续段的描述符,并提供对该数组中编号的元素序列的访问.

所以基本上切片是数组的某些(连续)部分的"视图".切片头或描述符包含指向它在数组中描述的部分的第一个值的指针,它包含长度和容量(可以扩展长度的最大值).

我真的建议阅读以下博文:

Go Blog:Go Slices:用法和内部

Go Blog:数组,切片(和字符串):'追加'的机制