Go 超过uint8片的射程?

Go 超过uint8片的射程?,go,Go,编辑这篇文章是因为我犯了一个愚蠢的错误,但这个问题值得留心,以防有人这样做 我希望这能奏效: var xs []uint8 var x uint8 for x = range xs { } 但我得到了一个错误: cannot assign type int to x (type uint8) in range i、 e.(据我所知,范围,即使它在uint8的片上运行,也试图使用int作为迭代值 我已经浏览了语言规范,相关部分: Range expression

编辑这篇文章是因为我犯了一个愚蠢的错误,但这个问题值得留心,以防有人这样做

我希望这能奏效:

var xs []uint8
var x uint8
for x = range xs {

}
但我得到了一个错误:

cannot assign type int to x (type uint8) in range
i、 e.(据我所知,
范围
,即使它在
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
因此,我希望它是
E
参数化类型*,在本例中是
uint8
而不是
int

我抓错了棍子的一端了吗?我有没有遗漏一些文档?或者我真的不能用
uint8
变量在
uint8
切片上迭代吗


*我知道它不是一个真正的通用参数化类型。

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)
    }
}
输出:

0 255
1 254
2 253
p.S.:

也许看一下Javascript会让Go的方法不那么奇怪:

% a = [255, 254, 253]
255,254,253
% for (x in a) { print(x, " ", a[x]); }
0 255
1 254
2 253

@乔-不客气;我添加了Javascript示例,因为我经常忘记than语言中的“it”。