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