[Solved] Implementation doesn’t match interface


In the interface the read method returns an interface{} whereas the CapacityResponse returns an int32. Go’s interface matching is done strictly on the signature of the function and does not take into consideration that an int32 does implement the interface{}. You can work around this by having two methods:

// This does the work
func (r *CapacityResponse) readInt32() int32  {
    return r.val
}
// This implements the interface signature
func (r *CapacityResponse) read() interface{} {
    // No type assertion necessary as int32 is an interface{}
    return r.readInt32()
}

There was a proposal to do what you wanted to a while ago but it got closed due to it’s complexity and issues with the semantics which you can read about here:

https://github.com/golang/go/issues/12754

solved Implementation doesn’t match interface