[英]Can I make the index int64 in golang's for-range iteration?
不,如果您使用带有“ range”子句的“ for”语句,则规范将索引的类型指定为int
:
Range expression 1st value 2nd value
array or slice a [n]E, *[n]E, or []E index i int a[i] E
string s string type index i int see below rune
map m map[K]V key k K m[k] V
channel c chan E, <-chan E element e E
您无能为力,也无能为力。 切片/数组的长度将适合int
。
不可能使切片大于max int
。 尝试使用常量表达式制作更大的片段是编译时错误:
x := make([]struct{}, 3123456789)
编译时错误: len argument too large in make([]struct {})
注意: int
大小是特定于实现的:它是32位或64位。 此处产生错误的常量表达式是针对32位int
的(Go Playground使用32位int
)。
如果length是运行时表达式,则将出现以下情况:
i := uint(3123456789)
y := make([]struct{}, i)
运行时错误: panic: runtime error: makeslice: len out of range
并且数组类型的长度也必须适合int
: Spec:数组类型:
长度是数组类型的一部分; 它必须计算出一个可以由
int
类型的值表示的非负常量 。
尝试使用更大的长度是一个编译时错误:
var x [3123456789]struct{}
type t1 [3123456789]byte
type t2 [3123456789]struct{}
所有编译时错误: array bound is too large
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.