Некоторые особенности работы со строками в Go

06.10.2024 - Alexey Nurgaliev - Программирование - Go

Стандартные методы работы со строками в 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:])
Лицензия Creative Commons
Code More Team - GitHub