
如何在 Go 中動態傳回結構體型別?
在您的 Revel 應用程式中,您遇到過由於不同函數返回相似資料類型而導致的程式碼冗餘。您無需為每個模型建立多個輔助函數,而是設想一個傳回 interface{} 類型的動態解決方案。這個問題深入探討了這種方法的可行性。
可能嗎?
是的,Go 中動態返回結構體類型是可能的,但是需要仔細考慮介面{}和類型斷言。
函數簽章
而不是[]*interface{},您應該宣告您的函式回傳
interface{}。這允許函數傳回任何類型,包括結構體。
1 | func (c Helper) ReturnModels(modelName string) interface {}
|
登入後複製
範例
考慮以下範例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | type Post struct {
Author string
Content string
}
type Brand struct {
Name string
}
var database map[string] interface {}
func ReturnModels(modelName string) interface {} {
return database[modelName]
}
|
登入後複製
其用法
您可以使用型別開關或斷言將回傳值轉換回原始值type.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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" ]))
|
登入後複製
在此範例中,switch語句評估從資料庫檢索的資料的類型。根據類型,將結果函數指派給特定的轉換函數,然後呼叫該函數。
結論
Go 中使用 interface{} 動態返回結構體類型是可以實現的,但需要小心處理。類型斷言可用於確保轉換正確的類型。請參閱連結的範例和文件以獲取進一步指導。
以上是Go 函數可以使用「interface{}」動態傳回不同的結構類型嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!