如何将不同类型作为struct{}传递给GoLang中的函数?

如何将不同类型作为struct{}传递给GoLang中的函数?,go,struct,types,type-conversion,parameter-passing,Go,Struct,Types,Type Conversion,Parameter Passing,我想写一个函数,将不同的结构类型作为一个参数。另外,我必须确定,在这些结构中有一个Id字段。所以我想要一个这样的函数:MyFunction(object*struct{Id int} 我尝试过将结构传递给*struct{Id int}和接口{}参数 例如,我有以下两种结构类型: type TableOne struct { Id int name string date string } type TableTwo struct { Id int

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

我尝试过将结构传递给
*struct{Id int}
接口{}
参数

例如,我有以下两种结构类型:

type TableOne struct {
    Id   int
    name string
    date string
}

type TableTwo struct {
    Id      int
    address string
    athome  bool
}
要将它们保存在数据库中(使用
反射
),我有以下功能:

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
我想写一个函数,将不同的结构类型作为一个参数。另外,我必须确保,在这些结构中有一个Id字段

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


(Go 2计划添加泛型,到那时这可能是可能的。但是,没有具体的时间表来说明何时可以使用泛型。)

Go是一种严格类型的语言。如果你为参数指定一个结构类型,那就是必须传递的类型。@Adrian,我明白。所以除了多次执行完全相同的函数外,没有其他方法了,只能使用其他agrument类型?这正是我想要阻止的。你说你试图传递值一个
interface{}
。这是正确的方法,什么不起作用?@JimB我必须确保结构有一个
Id int
变量,因为如果obj.Id!=0{Golang需要知道变量在那里。还有
interface{Id int}
不起作用。你不能。没有办法在字段上签订合同。接口提供了行为合同(应该如此)。需要从头开始纠正设计。