繁体   English   中英

我可以在golang的for-range迭代中使索引为int64吗?

[英]Can I make the index int64 in golang's for-range iteration?

根据规格

for idx, val range a_slice 

语句将idx作为integer返回。

由于制作大尺寸片是可能的 ,是有办法的机会idxint64

谢谢。

不,如果您使用带有“ 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

并且数组类型的长度也必须适合intSpec:数组类型:

长度是数组类型的一部分; 它必须计算出一个可以由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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM