Rückgabe von Adressen anstelle von Werten für Bereichsreferenzen
die Situation betrachten . Dies kann zu unerwartetem Verhalten führen, wie im folgenden Go -Code zu sehen ist:
import "fmt" type MyType struct { field string } func main() { var array [10]MyType for _, e := range array { e.field = "foo" } for _, e := range array { fmt.Println(e.field) fmt.Println("--") } }
In diesem Beispiel ist es die Absicht, die Eigenschaft "Feld" jedes Elements im Array zu ändern. Da die Range -Anweisung jedoch eine Kopie des Wertes zurückgibt, werden die Änderungen an eine lokale Kopie vorgenommen und betreffen nicht das ursprüngliche Array. Infolgedessen zeigt die Ausgabe alle "Feld" -Heeigenschaften als den Standardwert.
Um dieses Problem anzugehen, können Sie die Adresse des Elements in einer Bereichsschleife nicht zurückgeben. Stattdessen sollten Sie das Array mit dem Index durchführen, wie unten gezeigt:
func main() { var array [10]MyType for idx, _ := range array { array[idx].field = "foo" } for _, e := range array { fmt.Println(e.field) fmt.Println("--") } }
Durch die Verwendung des Index anstelle des Wertes in der für die für die Schleife stehende Änderungen, die an der Eigenschaft "Feld" vorgenommen wurden, werden im Original -Array reflektiert.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3