Senior
Analysieren Sie das folgende Go-Code-Snippet und erklären Sie, was vom Programm ausgegeben wird und warum: ```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 KI
Antwort von AI
Das Programm gibt aus:
Alice
Erklärung:
In Go, wenn man mit Maps arbeitet und der Wert eine Struktur (nicht ein Zeiger) ist, wird beim Zugriff auf das Element m["a"] eine Kopie der Struktur zurückgegeben, nicht eine Referenz auf das Original.
Im Code:
u := m["a"] // u ist eine Kopie der User-Struktur
u.Name = "Bob" // das Feld Name wird in der Kopie u geändert, nicht im Original im Map
Daher beeinflusst die Änderung u.Name nicht den Wert im Map.
Beim Ausgeben von fmt.Println(m["a"].Name) erhalten wir den ursprünglichen Wert des Feldes Name, der "Alice" ist.
Wenn man den Wert im Map ändern möchte, müsste man entweder Zeiger im Map verwenden oder die modifizierte Struktur wieder zuweisen:
u := m["a"]
u.Name = "Bob"
m["a"] = u
Dann wäre die Ausgabe "Bob".