Heim > Backend-Entwicklung > Golang > Wie konvertiere ich in Go ein Stück Strings in ein Stück String-Zeiger?

Wie konvertiere ich in Go ein Stück Strings in ein Stück String-Zeiger?

Patricia Arquette
Freigeben: 2024-12-14 20:38:19
Original
567 Leute haben es durchsucht

How to Convert a Slice of Strings to a Slice of String Pointers in Go?

Slice von Strings in Slice von Zeigern in Strings umwandeln

Das Ziel dieser Aufgabe ist es, ein Slice von Strings in ein Slice mit Inhalten umzuwandeln Zeiger auf jede dieser Zeichenfolgen. Sehen wir uns ein konkretes Beispiel an:

values1 := []string{"a", "b", "c"}
var values2 []*string

for _, v := range values1 {
    fmt.Printf("%p | %T\n", v, v)
    values2 = append(values2, &v)
}
fmt.Println(values2)
Nach dem Login kopieren

Anfängliche Verwirrung

Es mag kontraintuitiv erscheinen, dass v, obwohl es sich um eine Zeichenfolge handelt, während der gesamten Schleife an derselben Speicheradresse bleibt . Dies liegt daran, dass v in diesem Fall kein Zeiger auf eine Zeichenfolge ist, sondern vielmehr eine Kopie jeder Zeichenfolge in Werten1.

Zwei mögliche Lösungen

Lösung 1:

for i, _ := range values1 {
    values2 = append(values2, &values1[i])
}
Nach dem Login kopieren

Diese Methode hängt Zeiger auf die Elemente im ursprünglichen Slice „values1“ korrekt an „values2“ an. Es ist jedoch wichtig zu beachten, dass Werte2 jetzt Adressen enthält, die direkt auf Werte1 verweisen, sodass Werte1 im Speicher bleiben, solange Werte2 vorhanden sind.

Lösung 2:

for _, v := range values1 {
    v2 := v
    values2 = append(values2, &v2)
}
Nach dem Login kopieren

Diese alternative Lösung erstellt für jede Iteration eine temporäre lokale Variable (v2), weist ihr den Wert von v zu und hängt dann einen Zeiger auf v2 an Werte2 an. Dadurch wird sichergestellt, dass Werte1 unabhängig von Werten2 ist und alle Änderungen an Werten1 keine Auswirkungen auf Werte2 haben.

Das obige ist der detaillierte Inhalt vonWie konvertiere ich in Go ein Stück Strings in ein Stück String-Zeiger?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage