В переключателе типа, если вы хотите получить доступ к переменной, приведенной к соответствующему типу, просто используйте что-нибудь как switch x := v.(type)
и в каждом случае переключатель x
будет иметь соответствующее значение. В спецификации есть такой пример. Вы даже можете сделать switch v := v.(type)
, и в операторе switch будет теневая версия v.
E.g.:
switch x := v.(type) {
case []interface{}:
fmt.Printf("got %T\n", x)
for i, e := range x {
fmt.Println(i, e)
}
default:
fmt.Printf("I don't know how to handle %T\n", v)
}
детская площадка
Также обратите внимание, что вы можете просто использовать %T с fmt.Printf
вместо (напрямую) использования пакета Reflect, когда вы просто хотите напечатать тип переменной.
Наконец, обратите внимание, что переключатель типа — это то, что вам нужно, если у вас есть несколько предложений не по умолчанию, но если, как в вашем примере, у вас действительно есть только один интересующий вас тип, вместо этого вы должны сделать что-то вроде:
if x, ok := v.([]interface{}); ok {
fmt.Printf("got %T\n", x)
for i, e := range x {
fmt.Println(i, e)
}
} else {
fmt.Printf("I don't know how to handle %T\n", v)
}
person
Dave C
schedule
10.03.2015