Junior — Middle
Come si passa uno slice a una funzione in un linguaggio di programmazione?
sobes.tech AI
Risposta dell'AI
In Go, un slice viene passato a una funzione per valore, ma il slice contiene un puntatore a un array, oltre alla sua lunghezza e capacità. Ciò significa che passando un slice a una funzione, viene coperta la struttura del slice, ma non i dati dell'array a cui punta.
Per questo, le modifiche agli elementi del slice all’interno della funzione si riflettono sull’array originale, ma modificare il slice stesso (ad esempio, assegnandogli un nuovo slice) non influisce sul slice esterno.
Esempio:
package main
import "fmt"
func modifySlice(s []int) {
s[0] = 100 // cambierà l’elemento dell’array originale
s = append(s, 200) // cambierà il slice locale, quello esterno non cambierà
}
func main() {
s := []int{1, 2, 3}
modifySlice(s)
fmt.Println(s) // Stamperà: [100 2 3]
}
In questo modo, il slice viene passato per valore, ma grazie al puntatore interno, le modifiche agli elementi sono visibili fuori dalla funzione.