为了账号安全,请及时绑定邮箱和手机立即绑定

仅给定一个接口示例,如何初始化对象列表?

仅给定一个接口示例,如何初始化对象列表?

Go
慕雪6442864 2021-11-08 19:27:21
我正在用 Google Go 编写一个数据库接口。它需要encoding.BinaryMarshaler对象来保存并将它们保存为 []byte 切片,并将数据加载到其中encoding.BinaryUnmarshaler以返回它:func (db *DB) Get(bucket []byte, key []byte, destination encoding.BinaryUnmarshaler) (encoding.BinaryUnmarshaler, error) {我想实现能够encoding.BinaryUnmarshaler一次性加载任意长度的s切片(例如“从存储桶 X 加载所有数据”)。我希望该函数能够加载任意数量的数据对象,而无需事先知道要加载多少个对象,因此我不希望最终用户将要填充的切片传递给我。相反,我使用一个encoding.BinaryUnmarshaler示例对象来了解我正在处理的结构:func (db *DB) GetAll(bucket []byte, sample encoding.BinaryUnmarshaler) ([]encoding.BinaryUnmarshaler, error) {我在编码时遇到的问题是,我不确定如何初始化给定对象的新实例,因为我不知道我在处理什么对象,只知道它符合什么接口。我尝试做的是:tmp:=new(reflect.TypeOf(sample))但这只是导致了错误。如何在不知道它是什么结构的情况下在 go 中创建一个新对象,而是有一个示例对象?
查看完整描述

1 回答

?
森林海

TA贡献2011条经验 获得超2个赞

您必须与reflect.New一起使用reflect.TypeOf

tmp := reflect.New(reflect.TypeOf(sample))

http://play.golang.org/p/-ujqWtRzaP


查看完整回答
反对 回复 2021-11-08
  • 1 回答
  • 0 关注
  • 159 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信