Спецификация языка программирования Go
Для операторов
Для операторов с предложением диапазона
Для операторастроковое значение, предложение «range» перебирает кодовые точки Unicode в строке, начиная с байтового индекса 0. В последовательных итерациях значение индекса будет индексом первого байта последовательных кодированных точек UTF-8 в строкеи второе значение типа rune будет значением соответствующей кодовой точки.Если итерация встречает недопустимую последовательность UTF-8, второе значение будет 0xFFFD, символ замены Unicode, и следующая итерация будет продвигать один байт в строке.
In Goсимвол представляет собой кодовую точку Unicode, тип Go rune
(псевдоним int32
).Go string
s используются для хранения кодовых точек Unicode в кодировке UTF-8.
Спецификация языка программирования Go
Преобразования
Преобразования в и из строкового типа
Преобразование целочисленного значения со знаком или без знака в строковый тип приводит к строке, содержащей целочисленное представление UTF-8.Значения вне диапазона допустимых кодовых точек Unicode преобразуются в "\ uFFFD".
string('a') // "a"
string(-1) // "\ufffd" == "\xef\xbf\xbd"
string(0xf8) // "\u00f8" == "ø" == "\xc3\xb8"
type MyString string
MyString(0x65e5) // "\u65e5" == "日" == "\xe6\x97\xa5"
Например,
package main
import (
"fmt"
)
func main() {
helloworld := "Hello, 世界"
fmt.Println(helloworld)
for i, r := range helloworld {
fmt.Println(i, r, string(r))
}
}
Детская площадка: https://play.golang.org/p/R5sBeGiJzR4
Вывод:
Hello, 世界
0 72 H
1 101 e
2 108 l
3 108 l
4 111 o
5 44 ,
6 32
7 19990 世
10 30028 界
Ссылки:
Блог Go: строки, байты, руны и символы в Go
Консорциум Unicode