使用反射确定类型是否为字符串

关于如何在运行时确定对象类型的一些现有答案..god help us

if reflect.TypeOf(err) ==  string {

}

那不编译

if reflect.TypeOf(err) ==  "string" {

}

那个或这个都没有:

if reflect.TypeOf(err).Kind() ==  "string" {

}

我们如何做到这一点?

如果我使用其中一个答案给出的 typeof 函数,我会得到:

http://img2.mukewang.com/646b1e610001967204120200.jpg

米琪卡哇伊
浏览 192回答 2
2回答

慕勒3428872

比较像字符串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 Fif typeof(f) == "F"{    fmt.Println("hello F")}

MM们

要使用反射比较类型,请比较 reflect.Type 值:var stringType = reflect.TypeOf("") // this can be declared at package-levelif 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}如果要将类型映射到字符串,请使用由 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")}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go