Sobes.tech
Middle+

Compito: Cosa mostrerà il codice? ```go package main import "fmt" func main() { a := []int{1, 2, 3, 4, 5} b := a[:2] b = append(b, 100) fmt.Println(a, b) } ```

sobes.tech AI

Risposta dell'AI

Codice:

package main

import "fmt"

func main() {
    a := []int{1, 2, 3, 4, 5}
    b := a[:2]       // b fa riferimento ai primi due elementi di a: [1, 2]
    b = append(b, 100) // aggiungiamo 100 alla slice b
    fmt.Println(a, b)
}

Analisi:

  • Inizialmente, a = [1, 2, 3, 4, 5]
  • b := a[:2] — la slice b contiene [1, 2], e la sua capacità è 5 (da 0 alla fine di a)
  • append(b, 100) aggiunge l’elemento 100 alla slice b. Poiché la capacità di b permette di espandersi senza allocare nuova memoria, l’elemento 100 viene scritto in a[2], modificando l’array originale a.

Dopo l’append:

  • a diventa [1, 2, 100, 4, 5]
  • b diventa [1, 2, 100]

Output:

[1 2 100 4 5] [1 2 100]

Cioè, l’elemento a[2] è cambiato da 3 a 100, poiché b e a condividono un array sottostante.