Heim > Backend-Entwicklung > Golang > Wie erhalte ich Spaltennamen und -werte vom Gorm-Objekt?

Wie erhalte ich Spaltennamen und -werte vom Gorm-Objekt?

WBOY
Freigeben: 2024-02-09 15:30:09
nach vorne
1267 Leute haben es durchsucht

如何从 Gorm 对象获取列名称和值?

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!

Frageninhalt

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)
    }
}
Nach dem Login kopieren
trans := make([]orm.Trans, 0)

    db.Where("state = ?", state.FINISHED).Limit(1).Find(&trans)

    testfunc(trans)
Nach dem Login kopieren

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
Nach dem Login kopieren

Ich bin ein Neuling, daher sind Ihre Ideen willkommen. Meine möglichen Optionen scheinen folgende zu sein:

  • Verwenden Sie Reflexion (falls beim Schneiden anwendbar)
  • Irgendwie ein Feld in einem Modell finden?
  • Noch weitere Ideen?

Vielen Dank.

Lösung

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)

}
Nach dem Login kopieren

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}
Nach dem Login kopieren

3-Erhalten Sie die Ausgabe:-

Names [Name Id]
values [Zargham 2]
Nach dem Login kopieren

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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage