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

时间:2015-08-10 15:43:43

标签: reflection struct go

我有以下接口,为我的持久层实现更简单的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等结构,取决于调用方法的函数

1 个答案:

答案 0 :(得分:1)

  1. 将您的obj类型声明为接口{}

         Update(collection []byte, obj interface{} ) map[string]string  
    
  2. 现在您可以将Person,Book,Car等传递给此函数作为对象。

  3. 在每个实际结构

    的Update函数中使用类型开关
        switch t := obj.(type){
        case Car://Handle Car type
        case Perosn:
        case Book:
                      }
    

    结构需要在编译时决定.Go.Even接口中的动态类型都不是静态类型。