Wie Sie die Schleife durch die Felder in einem Golang struct zu get-und set-Werte in einem erweiterbaren Weg?

Ich habe eine struct Person.

type Person struct {
    Firstname string       
    Lastname  string       
    Years     uint8       
}

Dann habe ich zwei Instanzen dieser Struktur, PersonA und PersonB.

PersonA := {"", "Obama", 6}
PersonB := {"President", "Carter", 8}

Ich möchte eine Funktion schreiben, die Kopien der Werte von PersonA zu PersonB gegeben eine Bedingung für jedes Feld ein (d.h. nicht leer). Ich weiß, wie Sie dies tun, indem die hartcodierung des Feldes Namen, aber ich will eine Funktion, die funktioniert auch wenn ich die Person struct.

Ich weiß, Gehen überlegungen ist hilfreich, aber das Problem ist das abrufen und festlegen der Werte erfordert die Kenntnis der Arten, wenn Sie wollen, etwas zu verwenden, wie SetInt. Aber es ist eine "einfache" Möglichkeit, dies zu tun?

** Javascript-Analogie **
In Javascript können Sie einfach ein (für Immobilien in someObject) zu Durchlaufen.

(for propt in personA) {
  if personA[propt] != "" {
    //do something
    personB[propt] = personA[propt]
  }
}

Optionen, die ich habe ausgeschlossen:

  1. Verfolgen Sie die Felder in den einzelnen struct in eine Karte, dann eine Kombination von FieldByName und die Sammlung von Set* - Funktionen in der reflektieren pkg.

  2. Erstellen einer Schleife durch die Felder von Person manuell (unten). Weil ich will, zu tun, diese Art von "update" für viele andere Strukturen (Schule, Tiere, etc...)

    if PersonA.Firstname != "" {
      PersonB.Firstname = PersonA.Firstname 
    }

    ...

    if PersonA.Years != "" {
      PersonB.Years = PersonA.Years 
    }

Die Frage bringt mich auf halbem Weg dorthin, aber noch ist nicht erweiterbar, um alle Strukturen, für die will ich nutzen dieses "update" Funktion.

in golang, mit reflektieren, wie Sie den Wert eines struct-Feld?

** Weitere Nützliche Links **
GoLang: Zugriff auf struct-Eigenschaft nach Namen

InformationsquelleAutor platwp | 2014-04-28
Schreibe einen Kommentar