Sobes.tech
Junior — Middle

Je možné pridávať prvky do slice, ktorý je odovzdaný ako argument do funkcie?

sobes.tech AI

Odpoveď od AI

Áno, je možné pridávať prvky do poľa (slice), ktoré je odovzdané funkcii, ale je dôležité pochopiť, že v Go je slice štruktúra obsahujúca ukazovateľ na pole, dĺžku a kapacitu.

Ak vo funkcii použijete append a výsledok priradíte lokálnej premennej, zmeny nebudú ovplyvňovať pôvodný slice mimo funkcie, pokiaľ nevrátite nový slice alebo neodovzdáte ukazovateľ na slice.

Príklad:

func addElement(s []int) []int {
    s = append(s, 42) // pridanie prvku
    return s
}

func main() {
    s := []int{1, 2, 3}
    s = addElement(s) // je potrebné opätovne priradiť
    fmt.Println(s) // [1 2 3 42]
}

Ak chcete zmeniť slice vo vnútri funkcie bez jeho návratu, môžete odovzdať ukazovateľ:

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

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