Функция utf8.DecodeLastRuneInString

Функция utf8.DecodeLastRuneInString декодирует последний рун в строке, закодированной в UTF-8. Она возвращает два значения: сам декодированный рун и его размер в байтах. В первый параметр функция принимает строку, из которой нужно извлечь последний рун.

Если строка пустая, функция возвращает utf8.RuneError и размер 0. Если последний байт строки не является корректным началом UTF-8 последовательности, возвращается utf8.RuneError и размер 1.

Синтаксис

gorune, size := utf8.DecodeLastRuneInString(str)

Пример

Давайте декодируем последний рун в строке "abcde":

gopackage main

import (
  "fmt"
  "unicode/utf8"
)

func main() {
  r, size := utf8.DecodeLastRuneInString("abcde")
  fmt.Printf("rune: %q, size: %d\n", r, size)
}

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

go"rune: 'e', size: 1"

Пример

Давайте декодируем последний рун в строке с Unicode символом "Hello, 世界":

gopackage main

import (
  "fmt"
  "unicode/utf8"
)

func main() {
  str := "Hello, 世界"
  r, size := utf8.DecodeLastRuneInString(str)
  fmt.Printf("rune: %q, size: %d\n", r, size)
}

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

go"rune: '界', size: 3"

Пример

Давайте проверим поведение функции на пустой строке:

gopackage main

import (
  "fmt"
  "unicode/utf8"
)

func main() {
  r, size := utf8.DecodeLastRuneInString("")
  fmt.Printf("rune: %q, size: %d\n", r, size)
}

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

go"rune: '�', size: 0"

Пример

Давайте сравним с функцией utf8.DecodeLastRune, которая работает со срезом байтов:

gopackage main

import (
  "fmt"
  "unicode/utf8"
)

func main() {
  str := "Привет"
  r1, size1 := utf8.DecodeLastRuneInString(str)
  bytes := []byte(str)
  r2, size2 := utf8.DecodeLastRune(bytes)
  fmt.Printf("From string: rune %q, size %d\n", r1, size1)
  fmt.Printf("From bytes:  rune %q, size %d\n", r2, size2)
}

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

go"From string: rune 'т', size 2"
"From bytes:  rune 'т', size 2"

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

  • функцию utf8.DecodeLastRune,
    которая декодирует последний рун из среза байтов
  • функцию utf8.DecodeRuneInString,
    которая декодирует первый рун в строке
  • функцию utf8.DecodeRune,
    которая декодирует первый рун из среза байтов
  • функцию utf8.RuneCountInString,
    которая возвращает количество рун в строке