我遇到了一个我不明白的情况。
a := "hello"
fmt.Printf("%v %T\n",a[0],a[0])
这给了104 uint8
.
for _,v := range a {
fmt.Printf("%v %T\n",v,v)
}
这给出104 int32
了第一次迭代。我不明白为什么它们的类型不一样。第一个是byte
,第二个是rune
。我希望两者都是byte
。
这或许可以解释:
https://blog.golang.org/strings
简而言之: ifa
是一个字符串,a[i]
是一个字节,但在这里,r
是一个rune
:
for _,r:=range a {
...
}
当您在一个字符串上进行范围时,您将在该字符串的符文上进行范围。要覆盖字符串的字节,请使用:
for i:=0;i<len(a);i++ {
// Here, a[i] is byte
}