Конвертировать строку в руны
Когда вы преобразуете строку в срез рун, вы получаете новый срез, который содержит кодовые точки Unicode (руны) строки.
Для недопустимой последовательности UTF-8 значение руны будет 0xFFFD для каждого недопустимого байта.
r := []rune("ABC€")
fmt.Println(r) // [65 66 67 8364]
fmt.Printf("%U\n", r) // [U+0041 U+0042 U+0043 U+20AC]
Вы также можете использовать range цикл для доступа к кодовым точкам строки.
r := "ABC€"
for _, value := range r {
fmt.Println(value)
fmt.Printf("%U\n", value)
}
Вывод:
65
U+0041
66
U+0042
67
U+0043
8364
U+20AC
Конвертировать руны в строку
Когда вы конвертируете срез рун в строку, вы получаете новую строку, которая представляет собой конкатенацию рун, преобразованных в строки в кодировке UTF-8.
Значения вне диапазона допустимых кодовых точек Unicode преобразуются в \uFFFD, символ замены Unicode �.
s := string([]rune{'\u0041', '\u0042', '\u0043', '\u20AC', -1})
fmt.Println(s) // ABC€�
Производительность
Эти преобразования создают новый срез или строку и, следовательно, имеют временную сложность, пропорциональную количеству обрабатываемых байтов.
Более эффективная альтернатива в некоторых случаях - использовать strings.Builder, который может объединять строки без избыточного копирования.
Читайте также:
- Преобразование между массивом/срезом байтов и строкой в Golang
- Три способа разделить строку на срез в Golang
- Эффективная конкатенация строк в Golang
Комментариев нет:
Отправить комментарий