Das Basiskonzept Erstellen einer Database Manager API zum Abrufen von Daten über eine API. Ich verwende den GORM, um Daten der Instanzen der Structs zu erhalten. Also gibt es 300-400 Struktur, die die Tabellen darstellt.Golang Datenbankmanager API-Konzept, Fehler bei Typ Assertion
type Users struct {
ID int64
Name string
}
type Categories struct {
ID int64
Category string
}
Der nächste Schritt, den ich eine Funktion implementieren, die von Tabellennamen die richtige Instanz der Struktur ist zurückgeben, was ich über die API-Endpunkt param erhalten.
func GetModel(model string) interface{} {
switch model {
case "users":
return Users{}
case "categories"
return Categories{}
}
return false
}
Nach gibt es eine Operations-Struktur, wo das einzige Feld der DB ist. Es gibt Methoden, zum Beispiel die GetLast(), wo ich die GORM db.Last (& Benutzer) -Funktion verwenden möchte.
func (o Operations) GetLast(model string) interface{} {
modelStruct := GetModel(model)
.
.
.
return o.DB.Last(&modelStruct)
}
Es gibt Punkte, also ist das, was ich nicht weiß. Die aktuelle Lösung funktioniert nicht, da es sich in diesem Fall um eine Schnittstelle handelt {} Ich muss eine Typbestätigung machen more info in this question. Die Typ-Assertion sieht wie folgt aus:
func (o Operations) GetLast(model string) interface{} {
modelStruct := GetModel(model)
.
test := modelStruct.(Users)
.
return o.DB.Last(&test)
}
Diese Lösung funktioniert, aber in diesem Fall habe ich die Modularität verloren. Ich versuche mit der reflect.TypeOf(modelStruct)
, aber es funktioniert auch nicht, weil das Ergebnis der reflect.TypeOf ist ein reflect.Type, mit ist kein Golang-Typ.