Преобразование между string и []rune

Преобразование между string и []rune позволяет работать с отдельными символами (рунами) строки. В первом случае мы преобразуем строку в срез рун для посимвольной обработки, во втором - собираем срез рун обратно в строку. Это особенно важно при работе с Unicode-символами, которые могут занимать более одного байта.

Синтаксис

go[]rune(str)
string(runes)

Пример

Давайте преобразуем строку "hello" в срез рун и выведем каждый символ по отдельности:

gopackage 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)
  }
}

Результат выполнения кода:

go"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"

Пример

Давайте преобразуем срез рун обратно в строку:

gopackage main

import "fmt"

func main() {
  runes := []rune{'H', 'e', 'l', 'l', 'o'}
  res := string(runes)
  fmt.Println(res)
}

Результат выполнения кода:

go"Hello"

Пример

Давайте преобразуем строку с кириллическими символами в срез рун и обратно:

gopackage 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)
}

Результат выполнения кода:

go"Length in bytes: 12"
"Length in runes: 6"
"Привет"

Смотрите также

  • функцию to-rune,
    которая преобразует различные типы данных в руну
  • функцию to-string,
    которая преобразует различные типы данных в строку
  • функцию to-byte-slice,
    которая преобразует строку в срез байтов
  • функцию to-rune-slice,
    которая преобразует строку в срез рун