Sobes.tech
Junior

Как може да се работи със стрингове в езика Go?

sobes.tech AI

Отговор от AI

Стрингът в Go е неизменяема последователност от байтове. Той може да представлява както UTF-8 текст, така и произволни двоични данни.

Основните начини за работа:

  • Деклариране и инициализация:

    var s1 string           // Празен стринг
    s2 := "здравей"           // Инициализация с литерал
    s3 := `многострочен
    стринг`             // Необработен литерал
    
  • Дължина на стринга:

    len(s2) // Дължина в байтове. За "здравей" е 7.
    
  • Достъп до байтове:

    b := s2[0] // Вземане на байт по индекс. Връща 'з' (в UTF-8).
    

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

  • Достъп до руни (UTF-8 символи): Стрингът може да бъде итеративно обходен по руни:

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

    Дължина в руни:

    utf8.RuneCountInString(s2) // Дължина в руни. За "здравей" е 7.
    
  • Конкатенация на стрингове:

    str1 := "здравей"
    str2 := " свят"
    result := str1 + str2 // Конкатенация с +
    

    За ефективно съединяване на много стрингове използвайте strings.Builder.

    var sb strings.Builder
    sb.WriteString("здравей")
    sb.WriteString(" ")
    sb.WriteString("свят")
    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.