实施与接口不匹配

I have an interface:

type Responder interface{
    read()(interface{})
    getError()(error)
    setError(error)
    getTransactionId()(string)
}

And implementation:

type CapacityResponse struct{
    val int32
    err error
    transactionId string
}

func (r *CapacityResponse) getError() error {
    return r.err
}

func (r *CapacityResponse) setError(err error)  {
    r.err = err
}

func (r *CapacityResponse) read() int32  {
    return r.val
}

func (r *CapacityResponse) getTransactionId() string  {
    return r.transactionId
}

But seems CapacityResponse doesn't implement Responder interface. What is mismatched here?

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