Bolehkah Pergi Menggunakan Kaedah Struktur Hanya Menggunakan Nama Rentetannya?

Susan Sarandon
Lepaskan: 2024-11-17 01:57:03
asal
927 orang telah melayarinya

Can Go Invoke a Struct Method Using Only Its String Name?

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!
}
Salin selepas log masuk

.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!");
        }
    }
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan