golang获取反射类型的类型

Is it possible and how to get the reflect.Type of a type without creating an object from the type and calling on it reflect.TypeOf(obj)

What in java will be: MyType.class

You can achieve this without an instantiation with the following syntax;

package main

import (
    "fmt"
    "reflect"
)

type Test struct {
}


func main() {
    fmt.Println(reflect.TypeOf((*Test)(nil)).Elem())
}

play; https://play.golang.org/p/SkmBNt5Js6

Also, it's demonstrated in the reflect example here; https://golang.org/pkg/reflect/#example_TypeOf

No you can't have it directly, because in Go structs have no accessible fields to get their type.

One may think of tweaking it by doing the following:

type object struct {}

func main() {
    var obj object
    t := reflect.TypeOf(object)
    fmt.Println(t)
    // main.object
}

However, in Go every variable is initialized with its zero value, so this is perfectly equivalent to:

t := reflect.TypeOf(object{})
// main.object

If you look at Golang's source code, you'll see that reflect.Type is an interface implemented differently according to types, however you do not have access to those informations.

But, what you can do is get the type of a pointer to the struct and from there, get the actual type. The process is the same, except that a pointer's zero value is nil, so it takes less time to instantiate:

func main() {
    ptr_t := reflect.TypeOf((*object)(nil))
    fmt.Println(ptr_t)
    // *main.object

    t := ptr_t.Elem()
    fmt.Println(t)
    // main.object
}