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".