Чтобы сравнить типы с использованием отражений, сравните значенияlect.Type:
var stringType = reflect.TypeOf("") // this can be declared at package-level
if reflect.TypeOf(v) == stringType {
// v has type string
}
Учитывая произвольное имя типа X
, вы можете создать тип, используя:
var xType = reflect.TypeOf((*X)(nil)).Elem()
if reflect.TypeOf(v) == xType {
// v has type X
}
ЕслиВы хотите проверить, является ли значение какого-либо типа, а затем использовать утверждение типа :
if _, ok := v.(string); ok {
// v is a string
}
Если вы хотите отобразить типы в строки, используйте карту, основанную на отражении.Тип:
var typeName = map[reflect.Type]string{
reflect.TypeOf((*int)(nil)).Elem(): "int",
reflect.TypeOf((*string)(nil)).Elem(): "string",
reflect.TypeOf((*F)(nil)).Elem(): "F",
}
...
if n, ok := typeName[reflect.TypeOf(f)]; ok {
fmt.Println(n)
} else {
fmt.Println("other")
}