-2

我遇到了一个我不明白的情况。

    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

4

1 回答 1

3

这或许可以解释:

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
}
于 2020-03-22T17:06:10.627 回答