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:
solved Implementation doesn’t match interface