Sobes.tech
Junior — Middle

Lze přidávat prvky do slice, který je předán jako argument funkce?

sobes.tech AI

Odpověď od AI

Ano, je možné přidávat prvky do řezného pole (slice), které je předáno funkci, ale je důležité pochopit, že v Go je řezné pole (slice) strukturou obsahující ukazatel na pole, délku a kapacitu.

Pokud ve funkci použijete append a přiřadíte výsledek lokální proměnné, změny neovlivní původní řezné pole mimo funkci, pokud nevrátíte nový řez nebo nepředáte ukazatel na řezné pole.

Příklad:

func addElement(s []int) []int {
    s = append(s, 42) // přidání prvku
    return s
}

func main() {
    s := []int{1, 2, 3}
    s = addElement(s) // je třeba přiřadit zpět
    fmt.Println(s) // [1 2 3 42]
}

Pokud chcete změnit řezné pole uvnitř funkce bez jeho vrácení, můžete předat ukazatel:

func addElementPtr(s *[]int) {
    *s = append(*s, 42)
}

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