在游乐场,这段代码
package main
import (
"fmt"
)
var a = []byte{ 0xff, 0xaa, 0x66, 0x33, 0x00 }
func main() {
for b := range a {
fmt.Printf("%T\n", b)
}
}
打印
int
int
int
int
int
为什么在迭代它(或者至少是uint8或其他东西)时,一片字节不会给你字节?
以下是游乐场的链接:https://play.golang.org/p/V1uZZWWq-X。
答案 0 :(得分:4)
for i := range thing
将i
设置为事物的索引(与Python等不同)。 for i, b := range byteslice
会将索引放在i
中并将字节放在b
中,而for _, b := range byteslice
只会将该字节放入b
。< / p>
The spec on for statements列出了与range
表达式相关的所有不同特殊情况(包括字符串,通道和地图)。
答案 1 :(得分:3)
这不是导致问题的切片/字节/字符串/符文。这是你对范围的使用。您期望查看当前项目,但实际上您正在查看表示循环每次迭代的当前索引的整数。
要清楚,如果你的循环形式是; for i, v := range
然后i
是表示当前索引的int,而v
是临时存储的块,索引i
的值被分配给。如果你只想要值,那么你的循环就是; for _, v := range
。当您在左侧只有一个标识符时,它会分配索引,而不是值。