Home > Article > Backend Development > Can You Invoke a Struct Method in Go Using Only Its String Name Through Reflection?
Reflection: Accessing Structs by String
Consider a scenario where you have a struct with a specific method:
type MyStruct struct { } func (a *MyStruct) AAction() { fmt.Println("Hello a") }
To invoke the AAction method dynamically using reflection, you can do the following (valid approach):
reflect.New(reflect.TypeOf(MyStruct{})).MethodByName("AAction").Call([]reflect.Value{})
However, using MyStruct{} as an expression is not your desired approach. Instead, you want to specify the struct name as a string. This approach is currently inaccessible:
theStruct := "MyStruct" theAction := "AAction" reflect.New(reflect.TypeOf(theStruct)).MethodByName(theAction).Call([]reflect.Value{})
Unfortunately, this attempt is flawed because reflect.TypeOf(theStruct) will result in the type string.
Based on your research, you encountered a similar question regarding invoking a struct method by name using a string. However, the suggested approach of string matching is not a viable solution.
Answer:
Despite your aspirations, it is not possible to invoke a struct method using only a string representing the struct name. This is true because reflection requires a concrete value of the type in question in order to operate. Without a value, there is no way to interact with the struct or its methods.
To achieve your desired functionality, you would need to maintain a custom registry that maps struct names to their corresponding types. This registry would allow you to retrieve the type based on the string name and then use reflection as usual. However, this approach requires additional effort and may not be suitable in all scenarios.
The above is the detailed content of Can You Invoke a Struct Method in Go Using Only Its String Name Through Reflection?. For more information, please follow other related articles on the PHP Chinese website!