如何将不同类型作为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}
不起作用。你不能。没有办法在字段上签订合同。接口提供了行为合同(应该如此)。需要从头开始纠正设计。