我想写一个mgo API的抽象:
package manager
import "labix.org/v2/mgo"
type Manager struct {
collection *mgo.Collection
}
func (m *Manager) Update(model interface{}) error {
return m.collection.UpdateId(model.Id, model)
}
编译时,我得到“model.Id undefined(interface {}没有字段或方法ID)”,这本身就很明显。
这是一个完全错误的方法,或者是否有一个简单的解决方法如何让编译器“信任”在传递结构上运行时将存在Id属性。
答案 0 :(得分:4)
您可以定义一个声明Id函数的接口
type Ider interface {
Id() interface{}
}
如果您的模型是Ider,那么您的功能将起作用。
func (m *Manager) Update(model Ider) error {
考虑到mgo#Collection.UpdateId()
function需要interface{}
,它会接受Ider
。