一尘不染

如何仅给定一个接口样本来初始化对象列表?

go

我在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))

但这只是造成了错误。

我如何在不知道它是什么结构的情况下创建一个新对象,而是使用一个示例对象?


阅读 229

收藏
2020-07-02

共1个答案

一尘不染

您将不得不与reflect.New一起使用reflect.TypeOf

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

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

2020-07-02