Heim >Backend-Entwicklung >Golang >Können Go-Funktionen mithilfe von „interface{}' dynamisch verschiedene Strukturtypen zurückgeben?

Können Go-Funktionen mithilfe von „interface{}' dynamisch verschiedene Strukturtypen zurückgeben?

Linda Hamilton
Linda HamiltonOriginal
2024-12-28 22:51:12562Durchsuche

Can Go Functions Dynamically Return Different Struct Types Using `interface{}`?

Wie gebe ich Strukturtypen in Go dynamisch zurück?

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.

Ist das möglich?

Ja, es ist möglich, Strukturtypen in Go dynamisch zurückzugeben, aber es erfordert sorgfältige Überlegung von interface{} und Typzusicherung.

Funktionssignatur

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{}

Beispiel

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
}

Verwendung

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.

Fazit

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!

Stellungnahme:
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