为什么断言时会出现“无法分配”错误?

req is a interface{} and PostAccountRequest,CreateAccountRequest is struct, when I do this, I get cannot assign *account.PostAccountRequest to v (type *account.CreateAccountRequest) in multiple assignment

v, ok := req.(*account.CreateAccountRequest)                                                         
if ok {
    if v, ok = req.(*account.PostAccountRequest); ok {
        panic(ok)
    }
}

The snippet of code defines one variable v with type *account.CreateAccountRequest. The second type assertion attempts to assign a *account.PostAccountRequest to the variable v. This is an error.

The code will compile if you create a second variable v:

v, ok := req.(*account.CreateAccountRequest)                                                         
if ok {
    if v, ok := req.(*account.PostAccountRequest); ok { // note ":"
      panic(ok)
  }
}

... but does not make sense because v can only be one of the struct types.

Perhaps you are looking for something like this:

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?
}