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

解析在运行时传递给函数的结构体

解析在运行时传递给函数的结构体

Go
holdtom 2021-11-01 10:45:36
我有下面的接口,它为我的持久层实现了一个更简单的 Active Record Like 实现。type DBInterface interface {  FindAll(collection []byte) map[string]string  FindOne(collection []byte, id int) map[string]string  Destroy(collection []byte, id int) bool  Update(collection []byte, obj map[string]string ) map[string]string  Create(collection []byte, obj map[string]string) map[string]string}该应用程序具有不同的与之对话的集合以及不同的相应模型。我需要能够传入动态 Struct ,而不是值 obj 的映射(即更新,创建签名)我似乎无法理解如何使用反射来解决 Struct ,任何指导都会有所帮助。关于我正在尝试解释的更多详细信息:考虑以下来自https://labix.org/mgo 的mgo 示例的片段    err = c.Insert(&Person{"Ale", "+55 53 8116 9639"},               &Person{"Cla", "+55 53 8402 8510"})当我们向集合中插入数据时,我们做了一个 &Person 我希望能够传入这个位 &Person{"Ale", "+55 53 8116 9639"} 但接收 的方法只会在运行时知道它。因为它可能是 Person 、 Car 、 Book 等结构,具体取决于调用该方法的 func
查看完整描述

1 回答

?
拉风的咖菲猫

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

将您的 obj 类型声明为 interface{}


     Update(collection []byte, obj interface{} ) map[string]string  

现在您可以将 Person、Book、Car 等作为 obj 传递给此函数。


在 Update 函数内为每个实际结构使用类型开关


    switch t := obj.(type){

    case Car://Handle Car type

    case Perosn:

    case Book:

                  }

结构需要在编译时决定。Go 中没有动态类型。即使接口是静态类型。


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

添加回答

举报

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