Sobes.tech
Junior — Middle

Come si può aumentare la dimensione del segmento passato a una funzione in un linguaggio di programmazione?

sobes.tech AI

Risposta dell'AI

In Go, uno slice è una struttura che contiene un puntatore a un array, una lunghezza e una capacità. Se devi aumentare la dimensione di uno slice passato a una funzione, puoi fare quanto segue:

  • Passare lo slice per valore, ma all’interno della funzione creare un nuovo slice con lunghezza o capacità aumentate usando la funzione append.
  • Se devi modificare lo slice stesso (ad esempio, aumentare la lunghezza) e vuoi che le modifiche siano visibili all’esterno, puoi passare un puntatore allo slice (*[]T), così all’interno della funzione puoi riassegnare lo slice.

Esempio di aumento di uno slice all’interno di una funzione restituendo un nuovo slice:

func extendSlice(s []int, n int) []int {
    // Aggiungi n elementi nulli
    s = append(s, make([]int, n)...) 
    return s
}

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

Se la funzione deve modificare lo slice senza restituirlo, puoi usare un puntatore:

func extendSlicePtr(s *[]int, n int) {
    *s = append(*s, make([]int, n)...) 
}

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

In questo modo, per aumentare la dimensione dello slice all’interno di una funzione, devi restituire un nuovo slice o passare un puntatore allo slice.