透過字串呼叫結構體
問題:
在 Go🎜>問題:
在 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 函數傳回給定類型上具有給定名稱的方法。
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! }
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中文網其他相關文章!