1 回答
TA贡献1993条经验 获得超5个赞
不,如果您使用带有“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: Array types:
长度是数组类型的一部分;它必须评估为可由 type 值表示的非负常量int。
尝试使用更大的长度是一个编译时错误:
var x [3123456789]struct{}
type t1 [3123456789]byte
type t2 [3123456789]struct{}
所有编译时错误: array bound is too large
- 1 回答
- 0 关注
- 221 浏览
添加回答
举报