首页 > 后端开发 > Golang > Go 函数可以使用'interface{}”动态返回不同的结构类型吗?

Go 函数可以使用'interface{}”动态返回不同的结构类型吗?

Linda Hamilton
发布: 2024-12-28 22:51:12
原创
562 人浏览过

Can Go Functions Dynamically Return Different Struct Types Using `interface{}`?

如何在 Go 中动态返回结构体类型?

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板