Heim >Backend-Entwicklung >Golang >Wie erreicht man eine dynamische Typrückgabe in Go?

Wie erreicht man eine dynamische Typrückgabe in Go?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-02 05:33:14692Durchsuche

How to Achieve Dynamic Type Return in Go?

Wie gehe ich mit dynamischer Typrückgabe in Golang um?

Szenario:

Bei der Golang Revel-Entwicklung entsteht repetitiver Code zu ähnlichen Datenrückgabetypen mit Typstruktur. Betrachten Sie die folgenden Funktionen:

func (c Helper) Brands() []*models.Brand {

    // Query rethinkdb and populate the Brand model
    var brands []*models.Brand
    rows.All(&brands)

    return brands

}

func (c Helper) BlogPosts() []*models.Post {

    // Query rethinkdb and populate the Post model
    var posts []*models.Post
    rows.All(&posts)

    return posts

}

In beiden Fällen ist der Rückgabetyp derselbe (*[]struct). Um Duplikate zu vermeiden, wird ein dynamischer Rückgabetyp-Ansatz vorgeschlagen:

func (c Helper) ReturnModels(modelName string) []*interface{} {

    // Query rethinkdb with modelName and return []*interface{}
}

Fragen:

  • Ist eine dynamische Typrückgabe möglich?
  • So implementieren Sie es es?

Antwort:

Ja, eine dynamische Typrückgabe ist möglich. Die Funktion sollte interface{} anstelle von []*interface{} zurückgeben. So kann es implementiert werden:

func (c Helper) ReturnModels(modelName string) interface{} {

    // Query rethinkdb with modelName and return interface{}
}

Um den zurückgegebenen Wert zu nutzen, werden Typschalter oder Typzusicherungen verwendet, um ihn in seinen ursprünglichen Typ zurückzusetzen:

Beispiel:

if brands, ok := ReturnModels("brands").([]Brand); ok {
    // ...
}

if posts, ok := ReturnModels("posts").([]Post); ok {
    // ...
}

Durch die Implementierung dieses Ansatzes kann die Codeduplizierung durch die Verwendung einer einzigen Hilfsfunktion für Daten erheblich reduziert werden Abruf.

Das obige ist der detaillierte Inhalt vonWie erreicht man eine dynamische Typrückgabe in Go?. 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