登录
首页 >  Golang >  Go问答

函数接收多类型的数组参数

来源:stackoverflow

时间:2024-03-28 19:03:29 203浏览 收藏

在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《函数接收多类型的数组参数》,聊聊,希望可以帮助到正在努力赚钱的你。

问题内容

我想使用通用函数来解组不同类型:

type Foo struct {
  Name    string
  Another string
}

type Bar struct {
  Name  string
  Some  string
}

func unmarshal(data []byte, val *[]map[string]interface{}) {
  err := json.Unmarshal(data, val)

  if err != nil || (*val)[0]["Name"] == "" {
    *val = nil
  }
}

func main() {
  var foos []Foo
  var bars []Bar

  // fooData and barData are JSON strings retrieved from database
  unmarshal(fooData, &foos)
  unmarshal(barData, &bars)
}

我收到类似 cannot use &foo (type *[]foo) as type *[]map[string]interface {} in argument to unmarshal 的错误。

我尝试使用 val 接口{} 作为参数,但它不支持索引。

那我怎样才能实现目标呢?谢谢。


解决方案


要使用任意切片类型,请将参数声明为类型 interface{} 并使用 reflection 访问该值:

func unmarshal(data []byte, v interface{}) {
    err := json.Unmarshal(data, v)
    rv := reflect.ValueOf(v).Elem()

    if err != nil || rv.Len() == 0 || rv.Index(0).FieldByName("Name").Interface() == "" {
        rv.Set(reflect.Zero(rv.Type()))
    }
}

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《函数接收多类型的数组参数》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>