在您的 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 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"]))
以上是Go 函數可以使用「interface{}」動態傳回不同的結構類型嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!