Sobes.tech
Junior

Kako možete raditi sa nizovima u jeziku Go?

sobes.tech АИ

Одговор од АИ

У 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) заправо креира нови низ.