2 回答
TA贡献1773条经验 获得超3个赞
看起来您真正需要该类型的唯一两个地方是分配它时以及将其附加到数组时。因此,您可以更改函数以获取两个回调:
func GetStuff(bundleURI string, newItem func() interface{},collect func(interface{})) error {
// instead of var item = new(IP0059T1)
var item = newItem()
...
// instead of items = append(items, *item)
collect(item)
}
并使用以下方法调用该函数:
items:=make([]Item,0)
GetStuff(uri, func() interface{} {return new(Item)},
func(item interface{}) {items=append(items,*item.(*Item))})
TA贡献1111条经验 获得超0个赞
你可以像 Go 标准库那样做,例如 in encoding/json,就是把要填写的值作为参数。您的“通用”将类似于:
GetValues(bundleURI string, dest interface{}) (error)
wheredest应该是指向应该反序列化为任何类型的切片的指针,例如:
var v []IP0059T1
err = GetValues(myURI, &v)
然后,GetValues您可以使用reflect.Type.Elem()获取切片元素的类型,reflect.New()创建该类型的新实例,reflect.Append()并将它们直接附加到dest. 这保留了类型安全,同时允许某种程度的泛型编程。
- 2 回答
- 0 关注
- 144 浏览
添加回答
举报