如何将不同类型的struct {}传递给GoLang?

时间:2019-05-23 17:08:11

标签: go struct types type-conversion parameter-passing

我想编写一个将不同结构类型作为1参数的函数。另外,我必须确保在这些结构中有一个Id字段。所以我想拥有这样的功能:MyFunction(object *struct{ Id int }

我已经尝试过将结构传递给*struct{ Id int }interface{}参数。

例如,我有以下两种struct-types:

type TableOne struct {
    Id   int
    name string
    date string
}

type TableTwo struct {
    Id      int
    address string
    athome  bool
}

要将它们保存在数据库中(使用reflection),我具有以下功能:

func SaveMyTables(tablename string, obj *struct{ Id int }) {
    // ... Some code here

    if obj.Id != 0 {
        // ... Some code here
    }

    // ... Some code here
}

我将这样调用函数:

obj := &TableTwo{
    Id: 5
    address: "some address"
    athome: false
}

myPackage.Save("addresses", obj).

但是我得到这个错误:

cannot use obj (type *mytables.TableTwo) as type *struct { Id int } in argument to myPackage.Save

1 个答案:

答案 0 :(得分:1)

  

我想编写一个将不同结构类型作为1参数的函数。另外,我必须确保在这些结构中有一个ID字段。

从Go的当前版本开始,您不能执行此操作。 Go支持将多个参数类型传递给单个参数的唯一方法是通过使用接口,并且接口只能指定方法集,而不能指定字段。

(Go 2计划添加泛型,然后有可能这样做。但是,没有具体的时间表来确定何时可用。)