Sobes.tech
Junior — Middle

Ako zväčšiť veľkosť rezu, ktorý sa odovzdáva funkcii v programovacom jazyku?

sobes.tech AI

Odpoveď od AI

V jazyku Go je rez (slice) štruktúra, ktorá obsahuje ukazovateľ na pole, dĺžku a kapacitu. Ak potrebujete zväčšiť veľkosť rezu, ktorý sa odovzdáva do funkcie, môžete urobiť nasledovné:

  • Odovzdať rez hodnotou, ale vo vnútri funkcie vytvoriť nový rez s väčšou dĺžkou alebo kapacitou pomocou funkcie append.
  • Ak potrebujete zmeniť samotný rez (napríklad zväčšiť jeho dĺžku) a aby zmeny boli viditeľné zvonku, môžete odovzdať ukazovateľ na rez (*[]T), tak vo vnútri funkcie môžete rez predefinovať.

Príklad zväčšenia rezu vo vnútri funkcie s vrátením nového rezu:

func extendSlice(s []int, n int) []int {
    // Pridať n nulových prvkov
    s = append(s, make([]int, n)...) 
    return s
}

func main() {
    s := []int{1, 2, 3}
    s = extendSlice(s, 2)
    fmt.Println(s) // [1 2 3 0 0]
}

Ak funkcia má zmeniť rez bez vrátenia, môžete použiť ukazovateľ:

func extendSlicePtr(s *[]int, n int) {
    *s = append(*s, make([]int, n)...) 
}

func main() {
    s := []int{1, 2, 3}
    extendSlicePtr(&s, 2)
    fmt.Println(s) // [1 2 3 0 0]
}

Týmto spôsobom, aby ste zväčšili veľkosť rezu vo funkcii, musíte buď vrátiť nový rez alebo odovzdať ukazovateľ na rez.