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