Getting Type Representation from Name in Go with Reflection
Question:
How can one obtain a Type representation from its name using Go's reflection libraries?
Answer:
Understanding this question hinges on its interpretation. There are essentially two perspectives:
Runtime inaccessibility:
If the type's name is provided as a string at runtime, it cannot be converted to a Type representation. Types that aren't explicitly referenced may not be included in the final executable binary, making them inaccessible at runtime.
"Coding" time accessibility:
However, during coding (source code creation or generation), it is feasible to achieve this without creating a variable of the specified type and invoking reflect.TypeOf().
Obtaining the Embedded Type:
One can use a typed nil pointer value and traverse from the reflect.Type descriptor of the pointer to the base or element type of the pointer using Type.Elem().
Example:
t := reflect.TypeOf((*YourType)(nil)).Elem()
This approach yields a Type descriptor (t) identical to the descriptor (t2) obtained by creating a variable of the type and using reflect.TypeOf():
var x YourType t2 := reflect.TypeOf(x) fmt.Println(t, t2) fmt.Println(t == t2)
Output:
main.YourType main.YourType true
Conclusion:
While retrieving the Type representation is not feasible at runtime due to compilation constraints, it is possible during coding time by accessing the embedded type using the typed nil pointer approach.
The above is the detailed content of How Can I Get a Go Type Representation from Its Name at Compile Time?. For more information, please follow other related articles on the PHP Chinese website!