Go 不可能的类型切换情况:不能有动态类型
具有以下结构:Go 不可能的类型切换情况:不能有动态类型,go,interface,switch-statement,Go,Interface,Switch Statement,具有以下结构: package dto type CapacityResponse struct{ Val int Err error TransactionID string } func (r *CapacityResponse) GetError() (error) { return r.Err } func (r *CapacityResponse) SetError(err error) { r.Err = err } func (r
package dto
type CapacityResponse struct{
Val int
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() interface{} {
return r.Val
}
func (r *CapacityResponse) GetTransactionId() string {
return r.TransactionID
}
它的界面:
package dto
type Responder interface {
Read() (interface{})
GetError() (error)
SetError(error)
GetTransactionId() (string)
}
以及以下逻辑:
func handler(w http.ResponseWriter, r *http.Request) {
cr := request2CacheRequest(r)
responseChan := make(chan dto.Responder)
go func() {
responder := processReq(cr)
responseChan <- responder
}()
go func() {
for r := range responseChan {
if (r.GetTransactionId() == cr.TransactionID) {
switch r.(type) {
//case dto.KeysResponse:
//case dto.GetResponse:
//case dto.RemoveResponse:
//case dto.SetResponse:
case dto.CapacityResponse:
if i, ok := r.Read().(int); ok {
fmt.Fprintf(w, fmt.Sprintf("{'capasity': %d, 'err': %s}", i, r.GetError()))
}
}
}
}
}()
}
请您帮助我了解这里的错误是什么?错误消息说dto.Responder值不能包含dto.CapacityResponse,因为dto.CapacityResponse缺少一个dto.Responder方法(GetError) 指针类型实现接口。将案例更改为:
case *dto.CapacityResponse:
出现此错误是因为
dto.CapacityResponse
类型与*dto.CapacityResponse
类型不同。因为您使用的是接口类型
dto的局部变量r
。响应程序在case
语句中可以使用的唯一具体类型是实现此接口和dto的类型。CapacityResponse
不是其中之一,因为它不是指针类型,并且您已将接收器声明为dto.CapacityResponse
的指针。请看一看
case *dto.CapacityResponse: