Тип rune

Тип rune в Go является псевдонимом для int32 и предназначен для хранения Unicode-кодовых точек. Он используется для работы с отдельными символами в строках, которые могут занимать более одного байта в кодировке UTF-8. В отличие от типа byte, который хранит один байт (ASCII-символ), тип rune может хранить любой символ из таблицы Unicode.

Синтаксис

govar r rune = 'A'

Для объявления переменной типа rune используются одинарные кавычки. Литерал может содержать как один ASCII-символ, так и Unicode-символ, например, кириллицу или иероглиф.

Пример

Объявим переменную типа rune и выведем её значение и числовой код:

gopackage main

import "fmt"

func main() {
  var r rune = 'А'
  fmt.Printf("Символ: %c, код: %d\n", r, r)
}

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

go"Символ: А, код: 1040"

Пример

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

gopackage main

import "fmt"

func main() {
  str := "Go语言"
  runes := []rune(str)

  for i, r := range runes {
    fmt.Printf("Индекс: %d, символ: %c, код: %d\n", i, r, r)
  }
}

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

go"Индекс: 0, символ: G, код: 71"
"Индекс: 1, символ: o, код: 111"
"Индекс: 2, символ: 语, код: 35821"
"Индекс: 3, символ: 言, код: 35328"

Пример

Изменим символ в строке, используя срез рун:

gopackage main

import "fmt"

func main() {
  str := "abcde"
  runes := []rune(str)
  runes[2] = 'Z'
  newStr := string(runes)
  fmt.Println(newStr)
}

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

go"abZde"

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

  • тип byte,
    который представляет один байт (ASCII-символ)
  • тип string,
    который представляет строку как последовательность байтов
  • тип int32,
    который является числовым представлением типа rune
  • тип slice,
    который может содержать элементы типа rune