通过字符串调用结构体
问题:
在 Go 中是否可以调用使用表示结构名称的字符串的结构上的方法,无需显式初始化该结构的实例struct?
.NET Framework
在 .NET Framework 中,我们可以使用 Reflection.Assembly.GetType() 和 MethodInfo 来实现此行为。我们可以使用类型的字符串名称从程序集中获取类型,然后在该类型的实例上调用该方法。
.NET Core
但是,在 .NET Core 中,Assembly.GetType() 和 MethodInfo 不再可用。 .NET Core 中的反射 API 提供了对元数据的更受控制和类型安全的访问。
Go
在 Go 中,反射包提供了一种检查和操作的方法运行时的类型。 Reflect.TypeOf 函数返回值的类型,MethodByName 函数返回给定类型上具有给定名称的方法。
.Go 代码示例
package main import ( "fmt" "reflect" ) type MyStruct struct { } func (a *MyStruct) Hello() { fmt.Println("Hello from MyStruct!") } func main() { // Get the type of MyStruct. t := reflect.TypeOf(MyStruct{}) // Get the method with the name "Hello" on MyStruct. m := t.MethodByName("Hello") // Create a new instance of MyStruct. v := reflect.New(t) // Invoke the Hello method on the new instance. m.Call(v) // Output: Hello from MyStruct! }
.NET 代码示例
using System; using System.Reflection; public class Program { public static void Main(string[] args) { // Get the type of MyStruct using Reflection. Type t = Assembly.GetExecutingAssembly().GetType("MyStruct"); // Get the method with the name "Hello" on MyStruct. MethodInfo m = t.GetMethod("Hello"); // Create a new instance of MyStruct. object v = Activator.CreateInstance(t); // Invoke the Hello method on the new instance. m.Invoke(v, null); // Output: Hello from MyStruct! } public struct MyStruct { public void Hello() { Console.WriteLine("Hello from MyStruct!"); } } }
摘要
在 Go 中,不可能仅使用表示结构名称的字符串来调用结构上的方法,如没有预先初始化的类型名称注册表。需要自定义映射或初始化才能实现此功能。
以上是Go 可以仅使用其字符串名称来调用结构体方法吗?的详细内容。更多信息请关注PHP中文网其他相关文章!