Ich möchte structs Zeiger übergeben, um die Schnittstelle {} zu erwarten. Dann (durch Reflektion) den Zeiger auf den Member der Struktur holen und ihn dann mit diesem Zeiger modifizieren. Ich habe viel von Q & A gelesen und viel von Variationen versucht, aber immer noch kann ich es funktionieren.Wie bekomme Zeiger von Struktur Mitglied von Schnittstelle {} (Reflexion). Golang
Betrachten wir folgende Beispiel:
type Robot struct {
Id int
}
f := func(i interface {}) {
v := reflect.ValueOf(i).Elem().FieldByName("Id")
ptr := v.Addr().Pointer()
*ptr = 100
//^ it needs to me for functions expecting the pointer: Scan(&pointerToValue)
}
robot := &Robot{}
f(robot)
println(robot.Id) //I want to get here 100
ich glaube, das Problem in einem schlechten Verständnis, was Adr tatsächlich tun() und Pointer() Methoden der Verpackung widerspiegeln ..
Big danke. Mein Gehirn ist überlastet, ich versuche es morgen zu überprüfen! Ich denke, ich brauche Zeit und Übung, um wirklich zu verstehen, was hier vor sich geht. Vor allem hier! 'v.Addr(). Interface(). (* int)'. Könnten Sie teilen, wo kann ich diese Art von Wissen erfassen?) –
@TimurFayzrakhmanov Ich aktualisierte die Antwort mit einer Aufschlüsselung des Ausdrucks 'v.Addr(). Interface(). (* Int)'. –
v.Addr(). Interface() funktioniert hervorragend für DB-Aktionen. Vielen Dank dafür! – WhiteAngel