Sobes.tech
Junior — Middle

Quali dati all'interno dello slice vengono passati quando si chiama la funzione con questo slice come argomento?

sobes.tech AI

Risposta dell'AI

In Go, uno slice è una struttura che contiene tre campi: un puntatore a un array, una lunghezza e una capacità. Quando si passa uno slice a una funzione, viene copiata solo questa struttura, non l'intero array di dati.

Cioè, quando si chiama una funzione, lo slice viene passato per valore, ma vengono coperti solo i metadati (puntatore, lunghezza, capacità), non gli elementi dell'array stessi. Ciò significa che all'interno della funzione, lo slice punta allo stesso array di base, e le modifiche agli elementi dello slice all'interno della funzione saranno visibili all'esterno.

Esempio:

func modify(slice []int) {
    slice[0] = 100 // modifica il primo elemento
}

func main() {
    s := []int{1, 2, 3}
    modify(s)
    fmt.Println(s) // stamperà [100 2 3]
}

Pertanto, passando uno slice a una funzione, vengono coperti solo i tre campi della struttura dello slice, mentre i dati dell'array rimangono condivisi.