Sobes.tech
Junior — Middle

È possibile aggiungere elementi a uno slice passato come argomento a una funzione?

sobes.tech AI

Risposta dell'AI

Sì, è possibile aggiungere elementi allo slice passato alla funzione, ma è importante capire che in Go uno slice è una struttura che contiene un puntatore a un array, una lunghezza e una capacità.

Se nella funzione usi append e assegni il risultato a una variabile locale, le modifiche non influenzeranno lo slice originale fuori dalla funzione, a meno che non restituisca un nuovo slice o passi un puntatore allo slice.

Esempio:

func addElement(s []int) []int {
    s = append(s, 42) // aggiungi un elemento
    return s
}

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

Se vuoi modificare lo slice all'interno della funzione senza restituirlo, puoi passare un puntatore:

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

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