在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()))
}
}
文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《函数接收多类型的数组参数》文章吧,也可关注编程网公众号了解相关技术文章。
--结束END--
本文标题: 函数接收多类型的数组参数
本文链接: https://lsjlt.com/news/595789.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-04-05
2024-04-05
2024-04-05
2024-04-04
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-04
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0