Sobes.tech
Senior

Mit fog a program kiírni? func a() { x := []int{} x = append(x, 0) x = append(x, 1) x = append(x, 2) y := append(x, 3) z := append(x, 4) fmt.Println(y, z) } func main() { a() }

sobes.tech MI

Válasz az MI-től

A program a következőt fogja kiírni:

[0 1 2 3] [0 1 2 4]

Magyarázat:

  • Kezdetben az x egy üres szelet.
  • Az x-hez hozzáadódnak az 0, 1, 2 elemek.
  • y := append(x, 3) hozzáadja a 3-at az x szelethez. Ha a szelet kapacitása elegendő, akkor a y és az x ugyanarra a mögöttes tömbre mutatnak, de a y hossza nagyobb lesz.
  • A z := append(x, 4) szintén hozzáad egy elemet, de mivel a y már módosította a tömböt, a 4 hozzáadásakor új tömb jön létre, hogy elkerüljük a felülírást.

Így a y [0 1 2 3], a z pedig [0 1 2 4] lesz.

Példa a jobb megértéshez:

func a() {
    x := []int{}
    x = append(x, 0)
    x = append(x, 1)
    x = append(x, 2)
    y := append(x, 3)
    z := append(x, 4)
    fmt.Println(y, z)
}

func main() {
    a()
}