Sobes.tech
Junior — Middle

Jak lze zvětšit velikost řezu předávaného funkci v programovacím jazyce?

sobes.tech AI

Odpověď od AI

V jazyce Go je řez (slice) struktura, která obsahuje ukazatel na pole, délku a kapacitu. Pokud potřebujete zvětšit velikost řezů předaných do funkce, můžete postupovat následovně:

  • Předat řez hodnotou, ale uvnitř funkce vytvořit nový řez s větší délkou nebo kapacitou pomocí funkce append.
  • Pokud chcete změnit samotný řez (například zvětšit jeho délku) a aby byly změny viditelné i mimo funkci, můžete předat ukazatel na řez (*[]T), pak uvnitř funkce můžete řez předefinovat.

Příklad zvětšení řezů uvnitř funkce s vrácením nového řezů:

func extendSlice(s []int, n int) []int {
    // Přidat n nulových prvků
    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]
}

Pokud funkce má změnit řez bez vrácení, lze použít ukazatel:

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 způsobem, pokud chcete zvětšit velikost řezů uvnitř funkce, musíte buď vrátit nový řez, nebo předat ukazatel na řez.