我有一个界面:
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
接口。这里有什么不匹配?
答案 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()
}
有一个提议要做你想做的事情,但由于它的复杂性以及你在这里可以阅读的语义问题而被关闭了: