如何解决“类型接口没有字段或方法”错误?

时间:2014-07-05 06:16:56

标签: struct interface go

我想写一个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属性。

1 个答案:

答案 0 :(得分:4)

您可以定义一个声明Id函数的接口

type Ider interface {
    Id() interface{}
}

如果您的模型是Ider,那么您的功能将起作用。

func (m *Manager) Update(model Ider) error {

考虑到mgo#Collection.UpdateId() function需要interface{},它会接受Ider