首页 > 后端开发 > Golang > Go中如何实现动态类型返回?

Go中如何实现动态类型返回?

Patricia Arquette
发布: 2024-12-02 05:33:14
原创
623 人浏览过

How to Achieve Dynamic Type Return in Go?

Golang 中如何处理动态类型返回?

场景:

Golang Revel 开发中,由于重复代码而产生涉及结构类型的类似数据返回类型。考虑以下函数:

func (c Helper) Brands() []*models.Brand {

    // Query rethinkdb and populate the Brand model
    var brands []*models.Brand
    rows.All(&brands)

    return brands

}

func (c Helper) BlogPosts() []*models.Post {

    // Query rethinkdb and populate the Post model
    var posts []*models.Post
    rows.All(&posts)

    return posts

}
登录后复制

在这两种情况下,返回类型是相同的(*[]struct)。为了避免重复,建议采用动态返回类型方法:

func (c Helper) ReturnModels(modelName string) []*interface{} {

    // Query rethinkdb with modelName and return []*interface{}
}
登录后复制

问题:

  • 动态类型返回可能吗?
  • 如何实施

答案:

是的,动态类型返回是可以实现的。该函数应该返回interface{}而不是[]*interface{}。下面是它的实现方式:

func (c Helper) ReturnModels(modelName string) interface{} {

    // Query rethinkdb with modelName and return interface{}
}
登录后复制

为了利用返回的值,可以使用类型开关或类型断言将其转换回其原始类型:

示例:

if brands, ok := ReturnModels("brands").([]Brand); ok {
    // ...
}

if posts, ok := ReturnModels("posts").([]Post); ok {
    // ...
}
登录后复制

通过实现这种方法,可以通过使用单个数据辅助函数来显着减少代码重复检索。

以上是Go中如何实现动态类型返回?的详细内容。更多信息请关注PHP中文网其他相关文章!

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