Sobes.tech
Principal

Care sunt opțiunile pentru numărarea numărului de caractere într-un șir în Go? (discuție după interviu)

sobes.tech AI

Răspuns de la AI

В Go подсчёт количества символов в строке зависит от того, что считать символом — байтом, руном (Unicode code point) или графемой (user-perceived character).

  1. Подсчёт байтов:
s := "Привет"
count := len(s) // количество байтов
  1. Подсчёт рун (Unicode code points):
import "unicode/utf8"

s := "Привет"
count := utf8.RuneCountInString(s) // количество рун
  1. Подсчёт графем (графемных кластеров):

Для точного подсчёта пользовательских символов (например, учитывая сложные эмодзи или комбинированные символы) нужно использовать сторонние библиотеки, например, github.com/rivo/uniseg:

import "github.com/rivo/uniseg"

s := "👩‍👩‍👧‍👦"
graphemes := uniseg.NewGraphemes(s)
count := 0
for graphemes.Next() {
    count++
}

Таким образом, выбор метода зависит от задачи: для простых случаев достаточно utf8.RuneCountInString, для точного подсчёта пользовательских символов — графемы.