Ich habe eine Struktur Person.
%Vor%Dann habe ich zwei Instanzen dieser Struktur, PersonA und PersonB.
%Vor%Ich möchte eine Funktion schreiben, die die Werte von PersonA nach PersonB kopiert, wobei für jedes Feld eine Bedingung (d. h. nicht leer) gegeben ist. Ich weiß, wie man das macht, indem ich die Feldnamen fest kodiere, aber ich will eine Funktion, die funktioniert, selbst wenn ich die Person struct ändere.
Ich weiß, Go-Reflexionen sind hilfreich, aber das Problem ist, die Werte zu erhalten und zu setzen, wenn man die Typen kennt, wenn man etwas wie SetInt verwenden will. Aber gibt es einen "einfachen" Weg, dies zu tun?
** Javascript Analogie ** In Javascript könnten Sie einfach eine (für die Eigenschaft in someObject) durchlaufen.
%Vor%Optionen, die ich ausgeschlossen habe:
Verfolgen der Felder in jeder Struktur in einer Map, dann Verwenden einer Kombination aus FieldByName und der Auflistung von Set * -Funktionen in der reflektiert pkg .
Erstellen Sie manuell eine Schleife durch die Felder von Person (unten). Weil ich diese Art von "Update" für viele andere Strukturen (Schule, Tiere, etc ...) machen möchte.
%Vor%...
%Vor%Die folgende Frage bringt mich zur Hälfte, ist aber immer noch nicht für alle Strukturen erweiterbar, für die ich diese "update" -Funktion verwenden möchte.
in golang, mit reflect, wie setzt man den Wert eines struct-Feldes?
** Weitere hilfreiche Links ** GoLang: Zugriff auf die struct-Eigenschaft nach Name
Reflexion sollte alles sein, was Sie brauchen. Dies scheint der "Deep Copy" -Semantik ähnlich zu sein (wenn auch nicht identisch), die unter implementiert wurde Ссылка
Sie sollten in der Lage sein, das an Ihre Bedürfnisse anzupassen oder zumindest einige Ideen daraus zu übernehmen.
Verwenden Sie reflect.ValueOf (), es muss die Schnittstelle in den konkreten Typ konvertiert werden und SetXXX API , um den gewünschten Wert festzulegen.
%Vor%Tags und Links reflection go