当前位置: 首页 > 面试题库 >

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

谭繁
2023-03-14
问题内容

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

但这只是造成了错误。

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


问题答案:

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

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

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



 类似资料:
  • 问题内容: 在当前的问题中(我将文件打印到Java中的物理打印机),我一直在疯狂地遍历代码,试图从所使用的每个类的javadoc中吞噬所有有用的丢失信息。 现在,我从以前的问题中抽出了很多代码,所以有相当一部分我不是自己写的。我注意到的问题是,我抓取的代码正在初始化一个对象,例如实现接口(Doc)的“SimpleDoc”并将其分配给该接口? 小代码段: 现在,据我所知,我们创建了对象。我熟悉继承,

  • 问题内容: 我只是看了这个SO Post: 但是,哥伦比亚大学教授的笔记按以下方式进行。请参阅第9页。 哪种方法正确?他们似乎在说不同的话。 特别是在注释版本中没有。 问题答案: 这根本不会在Java中编译(因为您正在将数组类型的值分配给非数组类型的变量): 被以下错误拒绝(另请参见:http : //ideone.com/0jh9YE): 要进行编译,请声明其类型,然后在其上循环:

  • 说明 用于初始化接口类型、协议,验证接口密钥 请求地址 http://api.dc78.cn/Api/sys_init 请求方式 GET 请求参数 参数 参数名称 必填 描述 范例 protocal 接口协议类型 否 用于声明接口使用的协议类型 mqtt type 客户端接口 否 用于说明客户端接口的类型 api 接口协议目前支持两种:mqtt、http。设置相应类型后,平台端将以此协议与客户端进

  • 下面是带有复制构造函数和初始化列表构造函数的CL结构。我认为这里只能调用复制构造函数,因为根据C++14标准,8.5.4/3 null 谁是对的?谁的行为是正确的?

  • 问题内容: 我从AJAX调用REST服务器收到一个JSON对象。该对象具有与我的TypeScript类匹配的属性名称 初始化它的最佳方法是什么?我认为这行不通,因为类(和JSON对象)具有作为对象列表的成员和作为类的成员,而这些类具有作为列表和/或类的成员。 但是我更喜欢一种查找成员名称并在其间进行分配,创建列表并根据需要实例化类的方法,因此,我不必为每个类中的每个成员编写明确的代码(有很多!)