How to work around "type interface has no field or method" error?

go, interface, struct

Solution

You could defined an interface which declares an Id function

type Ider interface {
    Id() interface{}
}

If your model is an Ider, then your function will work.

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

Considering the `mgo#Collection.UpdateId()` function takes `interface{}`, it will accept an `Ider`.

Problem

I want to write an abstraction to the 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) } ``` When compiling I get "model.Id undefined (interface{} has no field or method Id)" which itself is obvious. Is this a totally wrong approach from my side or is there an easy workaround how to let the compiler "trust" that there will be an Id property on runtime on passed structs.

Original source