Sobes.tech
Senior

Elemezze az alábbi Go kódrészletet, és magyarázza el, mit fog a program kiírni, és miért: ```go func main() { type User struct { Name string } m := map[string]User{ "a": {Name: "Alice"}, } u := m["a"] u.Name = "Bob" fmt.Println(m["a"].Name) } ```

sobes.tech MI

Válasz az MI-től

A program így fog megjelenni:

Alice

Magyarázat:

Go-ban, amikor mapokkal dolgozik, és az érték egy struktúra (nem pointer), akkor az m["a"] elemhez való hozzáféréskor egy másolatot ad vissza a struktúráról, nem pedig egy hivatkozást az eredetire.

A kódban:

u := m["a"] // u egy másolat a User struktúráról
u.Name = "Bob" // a Name mező módosul a másolatban u, nem a mapben lévő eredetin

Ezért a u.Name módosítása nem befolyásolja a mapben lévő értéket.

A fmt.Println(m["a"].Name) kiírásakor az eredeti Name értékét kapjuk, ami "Alice".

Ha módosítani szeretnénk a mapben lévő értéket, akkor vagy pointereket kell használni a mapben, vagy újra kell rendelni a módosított struktúrát:

u := m["a"]
u.Name = "Bob"
m["a"] = u

Ebben az esetben a kimenet "Bob" lesz.