Sobes.tech
Junior — Middle

Poți adăuga elemente la un slice transmis ca argument într-o funcție?

sobes.tech AI

Răspuns de la AI

Da, este posibil să adăugați elemente la slice-ul transmis funcției, dar este important să înțelegeți că în Go, un slice este o structură care conține un pointer către un array, o lungime și o capacitate.

Dacă în funcție folosiți append și atribuiți rezultatul unei variabile locale, modificările nu vor afecta slice-ul original în afara funcției, cu excepția cazului în care returnați un nou slice sau transmiteți un pointer către slice.

Exemplu:

func addElement(s []int) []int {
    s = append(s, 42) // adaugă un element
    return s
}

func main() {
    s := []int{1, 2, 3}
    s = addElement(s) // trebuie să reasignați
    fmt.Println(s) // [1 2 3 42]
}

Dacă doriți să modificați slice-ul în interiorul funcției fără a-l returna, puteți transmite un pointer:

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

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