Senior
Analise o seguinte trecho de código Go e explique o que será impresso pelo programa e por quê: ```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 IA
Resposta da IA
O programa irá mostrar:
Alice
Explicação:
Em Go, ao trabalhar com mapas, se o valor for uma estrutura (não um ponteiro), ao acessar o elemento m["a"], é retornada uma cópia da estrutura, não uma referência à original.
No código:
u := m["a"] // u é uma cópia da estrutura User
u.Name = "Bob" // o campo Name é alterado na cópia u, não na original no mapa
Portanto, alterar u.Name não afeta o valor no mapa.
Ao imprimir fmt.Println(m["a"].Name), obtemos o valor original do campo Name, que é "Alice".
Se fosse necessário alterar o valor no mapa, seria preciso usar ponteiros no mapa, ou reatribuir a estrutura modificada:
u := m["a"]
u.Name = "Bob"
m["a"] = u
Assim, a saída seria "Bob".