Auswahl Referenzen statt Werte
Sah ich, dass die Reichweite gibt den Schlüssel und die "Kopie" des Wertes. Gibt es eine Möglichkeit für diesen Bereich zur Rückgabe der Adresse der Artikel? Beispiel
package main
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("--")
}
}
http://play.golang.org/p/AFOGG9NGpx
Hier "Feld" nicht verändert, weil Auswahl sendet die Kopie des Feldes
Muss ich zur Verwendung von index-oder gibt es irgendeinen anderen Weg, um den Wert zu ändern?
Vielen Dank für das Lesen.
- mögliche Duplikate von Ändern Sie die Werte während des Durchlaufs in golang
- Können Sie verwenden Sie ein array von pointer von
MyType
? - Ja, wenn Sie ein array von Zeigern können Sie die Ergebnisse direkt in das array ohne index, es ist hier ein Beispiel play.golang.org/p/_Vx7ONLDJs
range
ist in Ordnung, die & es gibt, was Sie schon ins innere der Scheibe. Hier werden Werte vom TypMyStruct
(das ist ein Wert-Typ) befinden sich im inneren der Scheibe. Stattdessen könnten wir die Zeiger von Typ*MyStruct
im inneren der Scheibe. Wenn Sie unbedingt brauchen, es zu arbeiten, wie es ist, könnten Sie Indizes verwenden, statt Werte, die vonrange
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kurze & direkte Antwort: Nein, der array-index nicht den Wert
Also der obige code wird:
array[idx]
könnten Sie stattdessen wählen, ume := &array[idx]
an der Spitze der for-Schleife und verwenden Sie danne.field1
,e.field2
usw, die mehr ähnelt die OP könnte haben wollte (nur mit zwei Linien statt einer)., _
ganz -for idx := range array