php Editor Strawberry In der Programmierentwicklung verwenden wir häufig Gorm-Objekte für Datenbankoperationen. Manchmal müssen wir den Spaltennamen und den entsprechenden Wert vom Gorm-Objekt abrufen. Wie kann diese Anforderung erfüllt werden? In Gorm können wir die Eigenschaften und Werte des Objekts durch Reflexion ermitteln und sie mit Gorms Beschriftungen kombinieren, um die Spaltennamen zu erhalten. Als Nächstes werde ich im Detail vorstellen, wie man Spaltennamen und -werte aus Gorm-Objekten erhält. Lass uns einen Blick darauf werfen!
Ich möchte eine Funktion schreiben, die jedes aus der Datenbank (über Gorm) geladene Objekt übernehmen und alle Spaltennamen und -werte ausdrucken kann. Der entscheidende Teil ist natürlich die Möglichkeit, jedes meiner Gorm-Modelle an diese Funktion zu übergeben. Ich zeige diese unten nicht, da sie alle einfach sind.
Was ich bisher habe, ist eine Funktion mit einer Schnittstelle und einigem Testcode, der sie aufruft:
func testfunc(s interface{}) { // type v := reflect.TypeOf(s) fmt.Println(v) // fields? for i := 0; i < v.NumField(); i++ { fmt.Println(i) } }
trans := make([]orm.Trans, 0) db.Where("state = ?", state.FINISHED).Limit(1).Find(&trans) testfunc(trans)
Beim Ausführen wird der Typ gedruckt und es kommt dann zur Panik:
[]orm.Trans panic: reflect: call of reflect.Value.NumField on slice Value
Ich bin ein Neuling, daher sind Ihre Ideen willkommen. Meine möglichen Optionen scheinen folgende zu sein:
Vielen Dank.
Probieren Sie diese Methode aus:
func testfunc(x interface{}){ v := reflect.ValueOf(x) s := reflect.TypeOf(x) names:=make([]interface{},v.NumField()) values := make([]interface{}, v.NumField()) for i := 0; i < v.NumField(); i++ { values[i] = v.Field(i).Interface() names[i] = s.Field(i).Name } fmt.Println("Names",names) fmt.Println("values",values) }
1- Sie übergeben ein Stück Struktur. (Wenn Sie Slicing verwenden, vermeiden Sie den Aufruf der obigen Funktion in einer Schleife.)
2- Ich übergebe diese Struktur an die obige Funktion
x := struct { Name string Id int }{"Zargham", 2}
3-Erhalten Sie die Ausgabe:-
Names [Name Id] values [Zargham 2]
Das obige ist der detaillierte Inhalt vonWie erhalte ich Spaltennamen und -werte vom Gorm-Objekt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!