Go 为什么我会得到一个“;无法分配”;在执行断言时出错?

Go 为什么我会得到一个“;无法分配”;在执行断言时出错?,go,Go,req是一个接口{},PostAccountRequest,CreateAccountRequest是struct,当我这样做时,我得到无法在多次赋值中将*account.PostAccountRequest分配给v(type*account.CreateAccountRequest) v, ok := req.(*account.CreateAccountRequest) if o

req是一个接口{},PostAccountRequest,CreateAccountRequest是struct,当我这样做时,我得到
无法在多次赋值中将*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}这样做,虽然两个字段相同,并非所有字段都相同。它们是不同的类型。