Преобразование между string и []rune
Преобразование между string и []rune позволяет работать с отдельными символами (рунами) строки. В первом случае мы преобразуем строку в срез рун для посимвольной обработки, во втором - собираем срез рун обратно в строку. Это особенно важно при работе с Unicode-символами, которые могут занимать более одного байта.
Синтаксис
[]rune(str)
string(runes)
Пример
Давайте преобразуем строку "hello" в срез рун и выведем каждый символ по отдельности:
package main
import "fmt"
func main() {
str := "hello"
runes := []rune(str)
for i, r := range runes {
fmt.Printf("Index: %d, Rune: %c, Code: %U\n", i, r, r)
}
}
Результат выполнения кода:
"Index: 0, Rune: h, Code: U+0068"
"Index: 1, Rune: e, Code: U+0065"
"Index: 2, Rune: l, Code: U+006C"
"Index: 3, Rune: l, Code: U+006C"
"Index: 4, Rune: o, Code: U+006F"
Пример
Давайте преобразуем срез рун обратно в строку:
package main
import "fmt"
func main() {
runes := []rune{'H', 'e', 'l', 'l', 'o'}
res := string(runes)
fmt.Println(res)
}
Результат выполнения кода:
"Hello"
Пример
Давайте преобразуем строку с кириллическими символами в срез рун и обратно:
package main
import "fmt"
func main() {
str := "Привет"
runes := []rune(str)
fmt.Printf("Length in bytes: %d\n", len(str))
fmt.Printf("Length in runes: %d\n", len(runes))
res := string(runes)
fmt.Println(res)
}
Результат выполнения кода:
"Length in bytes: 12"
"Length in runes: 6"
"Привет"
Смотрите также
-
функцию
to-rune,
которая преобразует различные типы данных в руну -
функцию
to-string,
которая преобразует различные типы данных в строку -
функцию
to-byte-slice,
которая преобразует строку в срез байтов -
функцию
to-rune-slice,
которая преобразует строку в срез рун