在您的 Revel 應用程式中,您遇到過由於不同函數返回相似資料類型而導致的程式碼冗餘。您無需為每個模型建立多個輔助函數,而是設想一個傳回 interface{} 類型的動態解決方案。這個問題深入探討了這種方法的可行性。
是的,Go 中動態返回結構體類型是可能的,但是需要仔細考慮介面{}和類型斷言。
函數簽章而不是[]*interface{},您應該宣告您的函式回傳interface{}。這允許函數傳回任何類型,包括結構體。
func (c Helper) ReturnModels(modelName string) interface{}範例考慮以下範例:
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 }其用法您可以使用型別開關或斷言將回傳值轉換回原始值type.
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中文網其他相關文章!