实现与接口不匹配

时间:2018-02-24 18:23:59

标签: go interface

我有一个界面:

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

并实施:

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
}

但似乎CapacityResponse没有实现Responder接口。这里有什么不匹配?

1 个答案:

答案 0 :(得分:1)

在接口中,read方法返回interface{},而CapacityResponse返回int32。 Go的接口匹配严格按照函数的签名进行,并没有考虑int32确实实现了interface{}。您可以通过两种方法解决此问题:

// 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()
}

有一个提议要做你想做的事情,但由于它的复杂性以及你在这里可以阅读的语义问题而被关闭了:

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