Sobes.tech
Junior

Чӣ тавр метавон бо сатрҳо дар забони Go кор кард?

sobes.tech AI

Ҷавоб аз 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.