为什么在Go中将字节切片的元素作为Int返回?

时间:2016-09-28 17:33:47

标签: arrays go types slice

在游乐场,这段代码

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

2 个答案:

答案 0 :(得分:4)

for i := range thingi设置为事物的索引(与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。当您在左侧只有一个标识符时,它会分配索引,而不是值。