Стандартные методы работы со строками в Go собраны в пакете strings. Но есть некоторые особенности, которых в стандартной библиотеке сейчас (go1.23) нет.
Пусть дана строка:
str := "Hello, world!"
Простой подсчет байт. Не работает для UTF-8 строк, т.к. символ может занимать несколько байт:
byteLength := len(str)
Подсчет через встроенный модуль поддержки UTF-8:
utf8Length := utf8.RuneCountInString(str)
Подсчет через преобразование в срез rune. Какое-то время назад (в версии 1.11) был оптимизирован - теперь не делает реальное преобразование, а подставляет код для вычисления длины строки:
runeLength := len([]rune(str))
В стандартной библиотеке нет функции для извлечения подстроки. Но можно работать со строкой как со срезом.
Если в строке только ASCII-символоы, то можно работать со строкой как со срезом байт:
str := "my string"
substr := str[3:] //взять символы с 3-го до конца строки (нумерация начинается с 0)
Если в строке есть еще и Unicode-символы, то строку можно предварительно преобразовать в срез рун:
str := "my string"
substr := string([]rune(str)[3:])