Senior
Analysez le fragment de code Go suivant et expliquez ce qui sera imprimé par le programme et pourquoi : ```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
Réponse de l'IA
Le programme affichera :
Alice
Explication :
En Go, lors de l'utilisation d'une map, si la valeur est une structure (pas un pointeur), alors en accédant à l'élément m["a"], une copie de la structure est renvoyée, et non une référence à l'original.
Dans le code :
u := m["a"] // u est une copie de la structure User
u.Name = "Bob" // le champ Name est modifié dans la copie u, pas dans l'original dans la map
Par conséquent, modifier u.Name n'affecte pas la valeur dans la map.
En affichant fmt.Println(m["a"].Name), on obtient la valeur originale du champ Name, qui est "Alice".
Si vous souhaitez modifier la valeur dans la map, il faut utiliser des pointeurs dans la map, ou réassigner la structure modifiée :
u := m["a"]
u.Name = "Bob"
m["a"] = u
Alors, la sortie serait "Bob".