答案 0 :(得分:5)
不,spec specifies如果您使用"为"则为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
s(Go Playground使用32位int
)。
如果length是运行时表达式,则会发生恐慌:
i := uint(3123456789)
y := make([]struct{}, i)
运行时错误:panic: runtime error: makeslice: len out of range
数组类型的长度也必须符合int
:Spec: Array types:
长度是数组类型的一部分;它必须使用
int
类型的值来评估为非负constant。
尝试使用更大的长度是编译时错误:
var x [3123456789]struct{}
type t1 [3123456789]byte
type t2 [3123456789]struct{}
所有编译时错误:array bound is too large