Heim >Backend-Entwicklung >Golang >Wie erstelle ich beim Umgang mit Zeigerreferenzen echte Kopien von Schnittstellenwerten in Go?
In Go kann es vorkommen, dass Sie Kopien von Schnittstellenwerten erstellen müssen, um einen eindeutigen Status beizubehalten. Beim Kopieren von Schnittstellenwerten, die Zeigerverweise enthalten, ist es wichtig, die Auswirkungen zu berücksichtigen. In diesem Artikel wird untersucht, wie mit solchen Szenarien umgegangen wird, und es werden Techniken zum Erstellen echter Kopien bereitgestellt.
Im angegebenen Beispiel verweist Benutzer1 über einen Zeiger auf eine Admin-Struktur. Das heißt, wenn Sie Benutzer1 Benutzer2 zuweisen, veranlassen Sie Benutzer2 im Wesentlichen, auf dieselbe zugrunde liegende Admin-Struktur zu verweisen. Alle über Benutzer1 oder Benutzer2 vorgenommenen Änderungen wirken sich auf die ursprüngliche Struktur aus.
Ein Ansatz zum Erstellen eindeutiger Kopien besteht darin, den Wert in Benutzer1, Kopie, einzugeben die zugrunde liegende Admin-Struktur und verpacken Sie ihre Adresse in einen neuen Benutzerwert:
var user2 User padmin := user1.(*Admin) // Obtain *Admin pointer admin2 := *padmin // Make a copy of the Admin struct user2 = &admin2 // Wrap its address in another User
Für eine allgemeinere Lösung können Sie die Reflexionsfunktionen von Go nutzen, um den zugrunde liegenden Typ abzurufen, dynamisch einen neuen Wert dieses Typs zu erstellen und ihn in einen neuen Benutzerwert einzuschließen:
if reflect.TypeOf(user1).Kind() == reflect.Ptr { // Pointer: user3 = reflect.New(reflect.ValueOf(user1).Elem().Type()).Interface().(User) } else { // Not pointer: user3 = reflect.New(reflect.TypeOf(user1)).Elem().Interface().(User) }
Durch die Verwendung von Reflektion können Sie Fälle behandeln, in denen der Wert in Benutzer1 kein Zeiger ist.
In Fällen, in denen Schnittstellenwerte vorliegen kopiert werden und unverwechselbar bleiben müssen, ist es wichtig, den zugrunde liegenden Typ sorgfältig zu prüfen und geeignete Techniken wie explizites Kopieren oder Reflektieren zu verwenden, um echte Kopien zu erstellen. Mit diesen Ansätzen können Sie eine Kopie ändern, ohne das Original zu beeinträchtigen.
Das obige ist der detaillierte Inhalt vonWie erstelle ich beim Umgang mit Zeigerreferenzen echte Kopien von Schnittstellenwerten in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!