Почему я получаю разные типы в строках? - PullRequest
0 голосов
/ 22 марта 2020

Я столкнулся с ситуацией, которую я не понимаю.

    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.

1 Ответ

3 голосов
/ 22 марта 2020

Это может объяснить это:

https://blog.golang.org/strings

Вкратце: если a - строка, a[i] - байт, но здесь, r - это rune:

for _,r:=range a {
...
}

Когда вы перемещаетесь по строке, вы изменяете по рунам этой строки. Чтобы указать диапазон байтов строки, используйте:

for i:=0;i<len(a);i++ {
   // Here, a[i] is byte
}
...