РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
25 of 1593 menu

Тип string

Тип string в Go представляет собой неизменяемую последовательность байтов. Строки могут содержать любые данные, включая байты, которые не образуют допустимый UTF-8, но обычно используются для хранения текста в кодировке UTF-8. Строки неизменяемы: после создания их содержимое нельзя изменить.

Синтаксис

var str string = "Hello, World!" str := "Hello, World!"

Длина строки

Функция len возвращает количество байтов в строке, а не количество символов (рун). Для подсчета символов используйте utf8.RuneCountInString:

package main import ( "fmt" "unicode/utf8" ) func main() { str := "Привет, мир!" byteLen := len(str) runeLen := utf8.RuneCountInString(str) fmt.Println(byteLen) // 20 fmt.Println(runeLen) // 11 }

Доступ к байтам

Доступ к отдельным байтам строки осуществляется по индексу, начиная с нуля:

package main import "fmt" func main() { str := "abcde" fmt.Println(str[0]) // 97 (код символа 'a') fmt.Println(str[2]) // 99 (код символа 'c') }

Итерация по строке

Для правильной итерации по символам (рунам) используйте цикл for range, который автоматически декодирует UTF-8:

package main import "fmt" func main() { str := "abcde" for index, char := range str { fmt.Printf("%d: %c\n", index, char) } }

Конкатенация строк

Строки можно объединять с помощью оператора + или fmt.Sprintf:

package main import "fmt" func main() { str1 := "Hello" str2 := "World" res := str1 + ", " + str2 + "!" fmt.Println(res) // "Hello, World!" }

Сравнение строк

Строки сравниваются лексикографически с помощью операторов ==, <, > и других:

package main import "fmt" func main() { str1 := "abcde" str2 := "abcde" str3 := "xyz" fmt.Println(str1 == str2) // true fmt.Println(str1 == str3) // false fmt.Println(str1 < str3) // true ("abcde" < "xyz") }

Преобразование строки в срез байт

Для преобразования строки в срез байт используйте явное приведение типа:

package main import "fmt" func main() { str := "abcde" bytes := []byte(str) fmt.Println(bytes) // [97 98 99 100 101] }

Преобразование среза байт в строку

Преобразование среза байт в строку также выполняется явным приведением типа:

package main import "fmt" func main() { bytes := []byte{97, 98, 99, 100, 101} str := string(bytes) fmt.Println(str) // "abcde" }

Преобразование строки в срез рун

Для работы с Unicode-символами преобразуйте строку в срез рун:

package main import "fmt" func main() { str := "abcde" runes := []rune(str) fmt.Println(runes) // [97 98 99 100 101] fmt.Println(string(runes)) // "abcde" }

Изменение строки

Поскольку строки неизменяемы, для "изменения" строки нужно создать новую строку, например, с помощью преобразования в срез байт или рун:

package main import "fmt" func main() { str := "abcde" // Преобразуем в срез байт bytes := []byte(str) bytes[0] = 'z' newStr := string(bytes) fmt.Println(str) // "abcde" fmt.Println(newStr) // "zbcde" }

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

  • тип byte,
    который представляет собой один байт (алиас для uint8)
  • тип rune,
    который представляет собой Unicode-символ (алиас для int32)
  • тип slice,
    который используется для хранения последовательностей элементов
  • тип array,
    который представляет собой массив фиксированной длины
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить