Struct Invocation by String
Soalan:
In Go, adakah mungkin untuk menggunakan kaedah pada struct menggunakan rentetan yang mewakili nama struct, tanpa memulakan secara eksplisit contoh struct?
.NET Framework
Dalam .NET Framework, kita boleh gunakan Reflection.Assembly.GetType() dan MethodInfo untuk mencapai tingkah laku ini. Kita boleh mendapatkan Jenis daripada perhimpunan menggunakan nama rentetan jenis dan kemudian menggunakan kaedah pada tika jenis itu.
.NET Core
Walau bagaimanapun, dalam Teras .NET, Assembly.GetType() dan MethodInfo tidak lagi tersedia. API refleksi dalam Teras .NET menyediakan akses yang lebih terkawal dan selamat jenis kepada metadata.
Go
Dalam Go, pakej refleksi menyediakan cara untuk memeriksa dan memanipulasi jenis semasa runtime. Fungsi reflect.TypeOf mengembalikan jenis nilai dan fungsi MethodByName mengembalikan kaedah dengan nama yang diberikan pada jenis yang diberikan.
.Go Code Sample
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! }
.Contoh Kod BERSIH
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!"); } } }
Ringkasan
Dalam Go, tidak mungkin untuk menggunakan kaedah pada struct menggunakan hanya rentetan yang mewakili nama struct, kerana tiada pendaftaran nama jenis pra-dimulakan. Pemetaan atau permulaan tersuai diperlukan untuk mencapai fungsi ini.
Atas ialah kandungan terperinci Bolehkah Pergi Menggunakan Kaedah Struktur Hanya Menggunakan Nama Rentetannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!