Go 为什么我会得到一个“;无法分配”;在执行断言时出错?
req是一个接口{},PostAccountRequest,CreateAccountRequest是struct,当我这样做时,我得到Go 为什么我会得到一个“;无法分配”;在执行断言时出错?,go,Go,req是一个接口{},PostAccountRequest,CreateAccountRequest是struct,当我这样做时,我得到无法在多次赋值中将*account.PostAccountRequest分配给v(type*account.CreateAccountRequest) v, ok := req.(*account.CreateAccountRequest) if o
无法在多次赋值中将*account.PostAccountRequest分配给v(type*account.CreateAccountRequest)
v, ok := req.(*account.CreateAccountRequest)
if ok {
if v, ok = req.(*account.PostAccountRequest); ok {
panic(ok)
}
}
代码片段定义了一个变量
v
,类型为*account.CreateAccountRequest
。第二种类型断言尝试将*account.PostAccountRequest
分配给变量v
。这是一个错误
如果创建第二个变量v
,则代码将编译:
v, ok := req.(*account.CreateAccountRequest)
if ok {
if v, ok := req.(*account.PostAccountRequest); ok { // note ":"
panic(ok)
}
}
。。。但是没有意义,因为v
只能是结构类型之一
也许你正在寻找这样的东西:
var name, token string
switch v := v.(type) {
case *account.CreateAccountRequest:
// v is a *account.CreateAccountRequest in this branch of the switch
name = v.Name
token = v.Token
case *account.PostAccountRequest:
// v is a *account.PostAccountRequest in this branch of the switch
name = v.Name
token = v.Token
default:
// panic?
}
我这样做的原因是因为我需要一个全局变量
v
,然后我可以像v.name v.token
@Mellow Marmotaccount.CreateAccountRequest{name string,token string,passwd string}和account.PostAccountRequest{name string,token string}这样做,虽然两个字段相同,并非所有字段都相同。它们是不同的类型。