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

标签 go go-reflect

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

if reflect.TypeOf(err) ==  string {

}

不编译

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

}

既不是那个也不是这个:

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

}

我们如何做到这一点?

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

enter image description here

最佳答案

比较字符串

if reflect.TypeOf(err).String() == "string" {
    fmt.Println("hello")
}

或使用 type assertions

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")
}

关于go - 使用反射确定类型是否为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53861831/

相关文章:

go - 如何在 Go 中查找对象的类型?

go - 如何在 Go 中获取包含数据结构的结构的大小?

arrays - Golang将2维数组拆分为一个维的多个数组

go - 在 golang 中初始化 C 结构时,结构初始化程序中的值太少

Golang - 解码额外的 XML 属性

json - 在不使用反射或复制代码的情况下从多个 JSON 数组解码实体

pointers - 将 reflect.AppendSlice 的结果分配给指针

go - 在 Go 中,如何在运行时从其类型创建一个新的结构实例?

Golang 返回子结构代替父结构,就像在 C++ 中一样

amazon-web-services - DynamoDB PutItem 上的条件表达式