Directly Obtaining Type Representation from Name in Go via Reflection
The question arises whether it is possible to use Go's reflection libraries to derive the Type representation of a type solely from its name. The motivation behind this question lies in a library where users must provide Type representations for code generation purposes.
At Runtime
This direct conversion is not feasible at runtime using a string representation of the type name. Types that are not explicitly referenced during compilation may not be present in the executable binary, making them "unknown" at runtime. Refer to "Splitting Client/Server Code" for an in-depth explanation. Workarounds may be found in "Call all functions with special prefix or suffix in Golang."
During Coding
However, during source code writing or generation, it is possible to achieve this without creating a variable of the given type and calling reflect.TypeOf(). By starting with a pointer to the type and utilizing a typed nil pointer value, one can navigate from the pointer's Type descriptor to the base type's descriptor using Type.Elem().
Here is an example:
t := reflect.TypeOf((*YourType)(nil)).Elem()
This Type descriptor, represented by the variable t, will be equivalent to the t2 descriptor derived from creating a variable x of the type YourType and applying reflect.TypeOf():
var x YourType t2 := reflect.TypeOf(x) fmt.Println(t, t2) fmt.Println(t == t2)
Output:
main.YourType main.YourType true
(Try it on the Go Playground)
The above is the detailed content of Can Go Reflection Directly Obtain a Type's Representation from its Name?. For more information, please follow other related articles on the PHP Chinese website!