为什么字节切片的元素在 Go 中以整数形式返回?
Why are Elements of Byte Slices Returned as Ints in Go?
在运动场上,此代码
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 或其他东西),为什么一个字节片不会给你字节?
这是去游乐场的 link:https://play.golang.org/p/V1uZZWWq-X。
不是 slice/bytes/strings/runes 引起的问题。这是你的使用范围。您期望查看当前项,但实际上您查看的是表示循环每次迭代中的当前索引的整数。
明确地说,如果你的循环形式是; for i, v := range
然后 i
是一个表示当前索引的 int,而 v
是一个临时存储块,索引 i
处的值被分配给了该块。如果您只想要这些值,那么您的循环就是; for _, v := range
。当左边只有一个标识符时,它分配的是索引,而不是值。
for i := range thing
将 i
设置为事物的索引(不同于 Python 等)。 for i, b := range byteslice
会将 index 放入 i
并将字节放入 b
,而 for _, b := range byteslice
只会将字节放入 b
].
The spec on for statements 列出了与 range
表达式(包括字符串、通道和映射)相关的所有不同特殊情况。
在运动场上,此代码
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 或其他东西),为什么一个字节片不会给你字节?
这是去游乐场的 link:https://play.golang.org/p/V1uZZWWq-X。
不是 slice/bytes/strings/runes 引起的问题。这是你的使用范围。您期望查看当前项,但实际上您查看的是表示循环每次迭代中的当前索引的整数。
明确地说,如果你的循环形式是; for i, v := range
然后 i
是一个表示当前索引的 int,而 v
是一个临时存储块,索引 i
处的值被分配给了该块。如果您只想要这些值,那么您的循环就是; for _, v := range
。当左边只有一个标识符时,它分配的是索引,而不是值。
for i := range thing
将 i
设置为事物的索引(不同于 Python 等)。 for i, b := range byteslice
会将 index 放入 i
并将字节放入 b
,而 for _, b := range byteslice
只会将字节放入 b
].
The spec on for statements 列出了与 range
表达式(包括字符串、通道和映射)相关的所有不同特殊情况。