编辑这是由于我的一个愚蠢的错误,但问题是值得保持,以防其他人这样做.
我希望这有效:
var xs []uint8
var x uint8
for x = range xs {
}
Run Code Online (Sandbox Code Playgroud)
但我得到错误:
cannot assign type int to x (type uint8) in range
Run Code Online (Sandbox Code Playgroud)
即(据我所知)range即使它在一片上运行uint8,也试图int用作迭代值.
我查看了语言规范,相关的一点:
Range expression 1st value 2nd value (if 2nd variable is present)
array or slice a [n]E, *[n]E, or []E index i int a[i] E
Run Code Online (Sandbox Code Playgroud)
所以我希望它是E'参数化类型'*,在这种情况下uint8不是int.
我抓住了棍子的错误一端吗?我错过了一些文档吗?或者我真的不能uint8用uint8变量迭代切片吗?
*我知道它不是一般的参数化类型.
range 将索引返回到集合中,并可能返回该位置的值:
range关键字 range关键字允许您迭代列表中的项目,如数组或映射.为了理解它,您可以将range关键字转换为每个索引.与数组和切片一起使用时,它返回项的整数索引.(教程)
示例代码:
package main
import "fmt"
func main() {
var xs []uint8 = []uint8{255, 254, 253}
var idx int
var ui8 uint8
for idx, ui8 = range xs {
fmt.Println(idx, ui8)
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
0 255
1 254
2 253
Run Code Online (Sandbox Code Playgroud)
PS:
也许看看Javascript会让Go的方法变得不那么奇怪:
% a = [255, 254, 253]
255,254,253
% for (x in a) { print(x, " ", a[x]); }
0 255
1 254
2 253
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
841 次 |
| 最近记录: |