在您的 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中文网其他相关文章!