检查Go中的struct类型

时间:2017-07-12 20:57:10

标签: go reflection

我试图检查Go中结构的类型。这是我能提出的最佳方式。有没有更好的方法来做到这一点,最好不要初始化结构?

package main

import (
    "fmt"
    "reflect"
)

type Test struct{
    foo int
}

func main() {
    t := Test{5}
    fmt.Println(reflect.TypeOf(t) == reflect.TypeOf(Test{}))
}

2 个答案:

答案 0 :(得分:5)

键入断言:

package main

import "fmt"

type Test struct {
    foo int
}

func isTest(t interface{}) bool {
    switch t.(type) {
    case Test:
        return true
    default:
        return false
    }
}

func main() {
    t := Test{5}
    fmt.Println(isTest(t))
}

Playground

答案 1 :(得分:2)

您可以通过"键入" nil指针值reflect.TypeOf(),并调用fmt.Println(reflect.TypeOf(t) == reflect.TypeOf((*Test)(nil)).Elem()) 以获取指向值的类型。这不会分配或初始化类型的值(有问题),因为只使用了raw_input指针值:

input()

Go Playground上尝试。

P.S。这完全相同,但无法找到原文。