是否有可能以及如何获取类型的reflect.Type而不从类型创建对象并调用它reflect.TypeOf(obj)
java中的内容:MyType.class
答案 0 :(得分:8)
您无需使用以下语法进行实例化即可实现此目的;
package main
import (
"fmt"
"reflect"
)
type Test struct {
}
func main() {
fmt.Println(reflect.TypeOf((*Test)(nil)).Elem())
}
播放; https://play.golang.org/p/SkmBNt5Js6
此外,它在这里的反映例子中得到了证明; https://golang.org/pkg/reflect/#example_TypeOf
答案 1 :(得分:3)
不,你不能直接拥有它,因为在Go结构中没有可访问的字段来获取它们的类型。
可以考虑通过执行以下操作来调整它:
type object struct {}
func main() {
var obj object
t := reflect.TypeOf(object)
fmt.Println(t)
// main.object
}
然而,在Go中,每个变量都使用零值进行初始化,因此这完全等同于:
t := reflect.TypeOf(object{})
// main.object
如果查看Golang的源代码,您会发现reflect.Type
是根据类型实现不同的接口,但是您无法访问这些信息。
但是,您可以做的是获取指向结构的指针的类型,然后从中获取实际类型。该过程是相同的,除了指针的零值为nil
,因此实例化所需的时间更短:
func main() {
ptr_t := reflect.TypeOf((*object)(nil))
fmt.Println(ptr_t)
// *main.object
t := ptr_t.Elem()
fmt.Println(t)
// main.object
}