Константа utf8.UTFMax

Константа utf8.UTFMax определяет максимальную длину в байтах, которую может занимать один символ Unicode (руна) при кодировании в UTF-8. Эта константа полезна при выделении буферов для работы с рунами, так как гарантирует, что буфер будет достаточно большим для хранения любой кодовой точки.

Синтаксис

goconst UTFMax = 4

Пример

Давайте выведем значение константы utf8.UTFMax:

gopackage main

import (
  "fmt"
  "unicode/utf8"
)

func main() {
  fmt.Println(utf8.UTFMax)
}

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

go4

Пример

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

gopackage main

import (
  "fmt"
  "unicode/utf8"
)

func main() {
  buf := make([]byte, utf8.UTFMax)
  r := '⌘'
  n := utf8.EncodeRune(buf, r)
  fmt.Printf("Rune: %c, bytes: %d\n", r, n)
  fmt.Printf("Buffer: %q\n", buf[:n])
}

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

go"Rune: ⌘, bytes: 3"
"Buffer: \"⌘\""

Пример

Давайте проверим, что все руны действительно помещаются в буфер размером utf8.UTFMax:

gopackage main

import (
  "fmt"
  "unicode/utf8"
)

func main() {
  runes := []rune{'A', '±', '世', '𠀀'}
  buf := make([]byte, utf8.UTFMax)

  for _, r := range runes {
    n := utf8.EncodeRune(buf, r)
    fmt.Printf("%c takes %d bytes\n", r, n)
  }
}

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

go"A takes 1 bytes"
"± takes 2 bytes"
"世 takes 3 bytes"
"𠀀 takes 4 bytes"

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

  • константу utf8.MaxRune,
    которая определяет максимальное значение кодовой точки Unicode
  • функцию utf8.RuneLen,
    которая возвращает количество байт для руны
  • функцию utf8.EncodeRune,
    которая кодирует руну в байтовый срез
  • функцию utf8.DecodeRune,
    которая декодирует руну из байтового среза