Sobes.tech
Junior

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

sobes.tech AI

Отговор от AI

В Go низовете са неизменяеми последователности от байтове.

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

  1. Създаване:

    // Литерал на низ
    s1 := "Hello, Go!"
    
    // От масив от байтове
    byteArray := []byte{'H', 'e', 'l', 'l', 'o'}
    s2 := string(byteArray)
    
  2. Конкатенация:

    s3 := "World"
    result := s1 + " " + s3 // Използване на оператора +
    

    За голямо количество конкатенации е по-ефективно да се използва strings.Builder:

    import "strings"
    
    var sb strings.Builder
    sb.WriteString("Hello")
    sb.WriteString(", ")
    sb.WriteString("World!")
    result2 := sb.String()
    
  3. Дължина:

    • В байтове:
      byteLength := len(s1)
      
    • В символи (руни):
      runeLength := utf8.RuneCountInString(s1) // Изисква импорт "unicode/utf8"
      
  4. Достъп до символи (руни) и итерация: В Go низовете са съставени от байтове, но при итерация с range те се декодират в руни (кодови точки Unicode).

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

    Пряк достъп по индекс връща байт, а не руна:

    b := s1[0] // Връща байт 'H'
    
  5. Преобразуване:

    • В масив от байтове:
      byteSlice := []byte(s1)
      
    • В масив от руни:
      runeSlice := []rune(s1)
      
  6. Пакет 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): Премахва бели символи от началото и края.
  7. Пакет fmt: За форматиран изход и четене на низове.

  8. Пакет strconv: За преобразуване на низове към числови типове и обратно.

    import "strconv"
    
    i, err := strconv.Atoi("123") // Низ към int
    s := strconv.Itoa(i)         // Int към низ
    

Неизменяемостта на низовете е важна и означава, че всяка операция, която изглежда като модификация на низ (например, конкатенация или Replace), всъщност създава нов низ.