猿问

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

按照规范

for idx, val range a_slice

语句返回idxinteger.

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

谢谢你。


阿波罗的战车
浏览 222回答 1
1回答

ibeautiful

不,如果您使用带有“range”子句的“for”语句,规范指定了索引的类型int:Range expression&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1st value&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2nd valuearray or slice&nbsp; a&nbsp; [n]E, *[n]E, or []E&nbsp; &nbsp; index&nbsp; &nbsp; i&nbsp; int&nbsp; &nbsp; a[i]&nbsp; &nbsp; &nbsp; &nbsp;Estring&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s&nbsp; string type&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; index&nbsp; &nbsp; i&nbsp; int&nbsp; &nbsp; see below&nbsp; runemap&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;m&nbsp; map[K]V&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; key&nbsp; &nbsp; &nbsp; k&nbsp; K&nbsp; &nbsp; &nbsp; m[k]&nbsp; &nbsp; &nbsp; &nbsp;Vchannel&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c&nbsp; chan E, <-chan E&nbsp; &nbsp; &nbsp; &nbsp;element&nbsp; e&nbsp; 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]bytetype t2 [3123456789]struct{}所有编译时错误: array bound is too large
随时随地看视频慕课网APP

相关分类

Go
我要回答