Как вы можете работать со строками в языке Go?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
В Go строки являются неизменяемыми последовательностями байт.
Основные способы работы со строками:
-
Создание:
// Строковый литерал s1 := "Hello, Go!" // Из слайса байт byteArray := []byte{'H', 'e', 'l', 'l', 'o'} s2 := string(byteArray) -
Конкатенация:
s3 := "World" result := s1 + " " + s3 // Использование оператора +Для большого количества конкатенаций эффективнее использовать
strings.Builder:import "strings" var sb strings.Builder sb.WriteString("Hello") sb.WriteString(", ") sb.WriteString("World!") result2 := sb.String() -
Длина:
- В байтах:
byteLength := len(s1) - В символах (рунах):
runeLength := utf8.RuneCountInString(s1) // Требует импорта "unicode/utf8"
- В байтах:
-
Доступ к символам (рунам) и итерация: В Go строки состоят из байт, но при итерации с помощью
rangeони декодируются в руны (кодовые точки Unicode).import "fmt" for index, runeValue := range s1 { fmt.Printf("Index: %d, Rune: %c, Type: %T\n", index, runeValue, runeValue) }Прямой доступ по индексу возвращает байт, а не руну:
b := s1[0] // Возвращает байт 'H' -
Преобразование:
- В слайс байт:
byteSlice := []byte(s1) - В слайс рун:
runeSlice := []rune(s1)
- В слайс байт:
-
Пакет
strings: Предоставляет множество полезных функций для работы со строками:strings.Contains(s, substr): Проверяет наличие подстроки.strings.HasPrefix(s, prefix): Проверяет наличие префикса.strings.HasSuffix(s, suffix): Проверяет наличие суффикса.strings.Index(s, substr): Поиск первого вхождения подстроки.strings.ReplaceAll(s, old, new): Замена всех вхождений подстроки.strings.Split(s, sep): Разбиение строки по разделителю.strings.Join(a []string, sep string): Объединение слайса строк.strings.ToLower(s): Преобразование к нижнему регистру.strings.ToUpper(s): Преобразование к верхнему регистру.strings.TrimSpace(s): Удаление пробельных символов с начала и конца.
-
Пакет
fmt: Для форматированного вывода и сканирования строк. -
Пакет
strconv: Для преобразования строк в числовые типы и наоборот.import "strconv" i, err := strconv.Atoi("123") // String to int s := strconv.Itoa(i) // Int to string
Неизменяемость строк важна и означает, что любая операция, которая кажется модифицирующей строку (например, конкатенация или Replace), на самом деле создает новую строку.