我尝试了len()
函数,但它给出了声明的值。 size()
函数会出错。
代码:
package main
var check [100]int
func main() {
println(len(check))
}
这里的输出是100
,我需要数组中的总项目(即0
)。
答案 0 :(得分:21)
Go中的数组是固定大小:在Go中创建数组后,您无法在以后更改其大小。这是因为数组的长度是数组类型的一部分(这意味着类型[2]int
和[3]int
是2种不同的类型)。也就是说,某些数组类型的值的长度总是相同的,并且由它的类型决定。例如,[100]int
类型的数组值的长度始终为100
,(可以使用内置函数len()
查询)。
长度是数组类型的一部分;它必须通过类型
int
的值来评估为非负constant。可以使用内置函数len来发现数组a
的长度。
如果您正在寻找“已设置了多少元素?”的答案,则不会在Go中跟踪。您正在寻找的“数组中的总项目”也始终与数组长度相同:在Go中创建数组时,数组中的所有元素都将初始化为元素类型的zero-value(除非否则例如通过使用composite literal)指定。
例如在此行之后:
var arr [100]int
数组arr
已经有100 int
个,都是0
(因为这是int
类型的零值)。在以下行之后:
var arr2 = [3]int{1, 2, 3}
数组arr2
有3个int
个元素,分别是1
,2
和3
。并在以下行之后
var arr3 = [...]bool{3: true}
数组arr3
有4个bool
元素,false
,false
,false
和true
(false
是类型为bool
的零值,我们仅将第4个元素指定为true
,其位于索引3
)。
如果您询问slices:
,您的问题可能会有更多意义切片是底层数组的连续段的描述符,并提供对该数组中编号的元素序列的访问。
所以基本上切片是数组中某些(连续)部分的“视图”。切片头或描述符包含指向它在数组中描述的部分的第一个值的指针,它包含长度和容量(可以扩展长度的最大值)。
我真的建议阅读以下博文:
The Go Blog: Go Slices: usage and internals
The Go Blog: Arrays, slices (and strings): The mechanics of 'append'