使用反射确定类型是否为字符串
Determine if type is a string using reflect
这里有一些关于如何在运行时确定对象类型的现有答案..god help us
if reflect.TypeOf(err) == string {
}
无法编译
if reflect.TypeOf(err) == "string" {
}
那个也不是这个:
if reflect.TypeOf(err).Kind() == "string" {
}
我们如何做到这一点?
如果我使用其中一个答案给出的 typeof 函数,我得到:
比较字符串
if reflect.TypeOf(err).String() == "string" {
fmt.Println("hello")
}
type F = func()
func typeof(v interface{}) string {
switch v.(type) {
case int:
return "int"
case string:
return "string"
case F:
return "F"
//... etc
default:
return "unknown"
}
}
然后
var f F
if typeof(f) == "F"{
fmt.Println("hello F")
}
要使用反射比较类型,请比较 reflect.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
}
如果你想检查一个值是否是某种类型,那么使用 type assertion:
if _, ok := v.(string); ok {
// v is a string
}
如果要将类型映射到字符串,请使用由 reflect.Type:
键入的映射
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")
}
这里有一些关于如何在运行时确定对象类型的现有答案..god help us
if reflect.TypeOf(err) == string {
}
无法编译
if reflect.TypeOf(err) == "string" {
}
那个也不是这个:
if reflect.TypeOf(err).Kind() == "string" {
}
我们如何做到这一点?
如果我使用其中一个答案给出的 typeof 函数,我得到:
比较字符串
if reflect.TypeOf(err).String() == "string" {
fmt.Println("hello")
}
type F = func()
func typeof(v interface{}) string {
switch v.(type) {
case int:
return "int"
case string:
return "string"
case F:
return "F"
//... etc
default:
return "unknown"
}
}
然后
var f F
if typeof(f) == "F"{
fmt.Println("hello F")
}
要使用反射比较类型,请比较 reflect.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
}
如果你想检查一个值是否是某种类型,那么使用 type assertion:
if _, ok := v.(string); ok {
// v is a string
}
如果要将类型映射到字符串,请使用由 reflect.Type:
键入的映射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")
}