Sobes.tech
Senior

Analyzujte nasledovný úryvok kódu v jazyku Go a vysvetlite, čo bude program vypisovať a prečo: ```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 AI

Odpoveď od AI

Program zobrazí:

Alice

Vysvetlenie:

V Go, keď pracujete s mapami a hodnota je štruktúra (nie ukazovateľ), pri prístupe k prvku m["a"] sa vráti kópia štruktúry, nie odkaz na originál.

V kóde:

u := m["a"] // u je kópia štruktúry User
u.Name = "Bob" // pole Name sa zmení v kópii u, nie v origináli v mape

Preto zmena u.Name neovplyvní hodnotu v mape.

Pri výpise fmt.Println(m["a"].Name) dostaneme pôvodnú hodnotu poľa Name, ktorá je "Alice".

Ak by ste chceli zmeniť hodnotu v mape, musíte použiť ukazovatele v mape alebo priradiť späť zmenenú štruktúru:

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

Potom bude výstup "Bob".