Назад к вопросам
Junior
118
questionbank

Как можно работать со строками в языке Go?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

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

Основные способы работы:

  • Объявление и инициализация:

    var s1 string           // Пустая строка
    s2 := "привет"          // Инициализация строковым литералом
    s3 := `многострочная
    строка`                 // Сырой строковый литерал
    
  • Длина строки:

    len(s2) // Длина в байтах. Для "привет" это будет 12.
    
  • Доступ к байтам:

    b := s2[0] // Получение байта по индексу. Вернет 'п' (в UTF-8).
    

    Прямой доступ к байтам не гарантирует получение символа UTF-8.

  • Доступ к рунам (символам UTF-8): Строки можно итерировать по рунам:

    for index, runeValue := range s2 {
        fmt.Printf("Индекс: %d, Руна: %c\n", index, runeValue)
    }
    

    Длина в рунах:

    utf8.RuneCountInString(s2) // Длина в рунах. Для "привет" это будет 6.
    
  • Конкатенация строк:

    str1 := "hello"
    str2 := " world"
    result := str1 + str2 // Конкатенация оператором +
    

    Для эффективной конкатенации большого числа строк используйте strings.Builder.

    var sb strings.Builder
    sb.WriteString("hello")
    sb.WriteString(" ")
    sb.WriteString("world")
    result := sb.String() // Получение результирующей строки
    
  • Преобразование между строками и срезами байт/рун:

    byteslice := []byte(s2)   // Строка в срез байт
    rs := []rune(s2)          // Строка в срез рун
    
    backToString := string(byteslice) // Срез байт в строку
    backToString = string(rs)         // Срез рун в строку
    
  • Модуль strings: Предоставляет множество полезных функций:

    • Contains, HasPrefix, HasSuffix
    • Index, LastIndex
    • Replace, ToUpper, ToLower, Trim, TrimSpace
    • Split, Join
  • Модуль strconv: Для преобразования строк в другие типы данных (числа, булевы) и обратно.

    i, err := strconv.Atoi("123") // Строка в int
    s := strconv.Itoa(456)        // int в строку
    
  • Неизменяемость: Любые операции, кажущиеся изменением строки (например, конкатенация), на самом деле создают новую строку. Это важно учитывать для производительности при частых изменениях. В таких случаях лучше использовать []byte или strings.Builder.