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