Shu*_*uan 2 arrays for-loop go slice
按照规范的
for idx, val range a_slice
Run Code Online (Sandbox Code Playgroud)
语句返回idx为integer.
由于制作大尺寸片是可能的,是有办法的机会idx来int64?
谢谢.
不,规范指定了int如果使用带有"range"子句的"for"语句的索引类型:
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
Run Code Online (Sandbox Code Playgroud)
你无能为力,也没有什么可以做的.切片/阵列的长度将适合int.
切片大于最大值是不可能的int.尝试使用常量表达式创建更大的切片是编译时错误:
x := make([]struct{}, 3123456789)
Run Code Online (Sandbox Code Playgroud)
编译时错误: len argument too large in make([]struct {})
注意:大小int是特定于实现的:它是32位还是64位.这里产生错误的常量表达式是32位ints(Go Playground使用32位ints).
如果length是运行时表达式,则会发生以下情况:
i := uint(3123456789)
y := make([]struct{}, i)
Run Code Online (Sandbox Code Playgroud)
运行时错误: panic: runtime error: makeslice: len out of range
并且数组类型的长度也必须适合int:规范:数组类型:
长度是数组类型的一部分; 它必须求值为可由类型值表示的非负常量
int.
尝试使用更大的长度是编译时错误:
var x [3123456789]struct{}
type t1 [3123456789]byte
type t2 [3123456789]struct{}
Run Code Online (Sandbox Code Playgroud)
所有编译时错误: array bound is too large