Heim >Backend-Entwicklung >Golang >Können Go-Funktionen mithilfe von „interface{}' dynamisch verschiedene Strukturtypen zurückgeben?
In Ihrer Revel-Anwendung sind Sie auf Coderedundanz gestoßen, die durch verschiedene Funktionen verursacht wurde, die ähnliche Datentypen zurückgeben. Anstatt mehrere Hilfsfunktionen für jedes Modell zu erstellen, stellen Sie sich eine dynamische Lösung vor, die Schnittstellen{}-Typen zurückgibt. Diese Frage befasst sich mit der Machbarkeit dieses Ansatzes.
Ja, es ist möglich, Strukturtypen in Go dynamisch zurückzugeben, aber es erfordert sorgfältige Überlegung von interface{} und Typzusicherung.
Anstelle von []*interface{}, Sie sollten Ihre Funktion so deklarieren, dass sie Schnittstelle{} zurückgibt. Dadurch kann die Funktion jeden Typ zurückgeben, einschließlich Strukturen.
func (c Helper) ReturnModels(modelName string) interface{}
Betrachten Sie das folgende Beispiel:
type Post struct { Author string Content string } type Brand struct { Name string } var database map[string]interface{} // Simulates a dynamic data source func ReturnModels(modelName string) interface{} { return database[modelName] // Retrieve data from hypothetical database }
Sie kann Typschalter oder Typzusicherungen verwenden, um den Rückgabewert auf seinen ursprünglichen Wert zurückzusetzen Typ.
type switcher func(interface{}) interface{} var result switcher switch modelName := database["myModel"].(type) { case Brand: result = func(v interface{}) interface{} { return v.(Brand) } case Post: result = func(v interface{}) interface{} { return v.(Post) } } fmt.Println(result(database["myModel"]))
In diesem Beispiel wertet die switch-Anweisung den Typ der aus der Datenbank abgerufenen Daten aus. Basierend auf dem Typ wird die Ergebnisfunktion einer bestimmten Casting-Funktion zugewiesen, die dann aufgerufen wird.
Die dynamische Rückgabe von Strukturtypen in Go mithilfe von interface{} ist möglich, erfordert jedoch eine sorgfältige Handhabung . Typzusicherungen können verwendet werden, um sicherzustellen, dass der richtige Typ umgewandelt wird. Weitere Hinweise finden Sie im verlinkten Beispiel und in der Dokumentation.
Das obige ist der detaillierte Inhalt vonKönnen Go-Funktionen mithilfe von „interface{}' dynamisch verschiedene Strukturtypen zurückgeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!