猿问

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

我想编写一个将不同结构类型作为 1 个参数的函数。另外,我必须确定,在这些结构中是一个Id字段。所以我想要这样的功能:


MyFunction(object *struct{ Id int })

我尝试将结构作为*struct{ Id int }参数传递interface{}。


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


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).

但我收到此错误:


不能在 myPackage.Save 的参数中使用 obj(类型 *mytables.TableTwo)作为类型 *struct { Id int }


眼眸繁星
浏览 99回答 1
1回答

不负相思意

我想编写一个将不同结构类型作为 1 个参数的函数。另外,我必须确定,在这些结构中是一个Id字段。从当前版本的 Go 开始,你不能这样做。Go 支持将多个参数类型传递给单个参数的唯一方法是通过使用接口,接口只能指定方法集,不能指定字段。(Go 2 计划添加泛型,届时这可能是可能的。但是,尚无具体的时间表说明何时可用。)
随时随地看视频慕课网APP

相关分类

Go
我要回答