Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah saya boleh mendapatkan semula nama kaedah secara pemrograman daripada jenis antara muka menggunakan pantulan dalam Go?

Bagaimanakah saya boleh mendapatkan semula nama kaedah secara pemrograman daripada jenis antara muka menggunakan pantulan dalam Go?

Susan Sarandon
Susan Sarandonasal
2024-10-28 05:48:01470semak imbas

How can I programmatically retrieve method names from an interface type using reflection in Go?

Mendapatkan Nama Kaedah daripada Jenis Antara Muka

Mendapatkan senarai nama kaedah untuk jenis antara muka melalui refleksi masa jalan adalah tugas biasa. Contohnya, dalam jenis antara muka seperti:

type FooService interface {
    Foo1(x int) int
    Foo2(x string) string
}

Anda mungkin mahu mendapatkan semula nama kaedah ["Foo1", "Foo2"] secara dinamik menggunakan pantulan.

Penyelesaian:

Untuk mencapai matlamat ini, gunakan coretan kod berikut:

t := reflect.TypeOf((*FooService)(nil)).Elem()
var s []string
for i := 0; i < t.NumMethod(); i++ {
    s = append(s, t.Method(i).Name)
}

Penjelasan:

  1. Dapatkan semula Jenis Antara Muka: Untuk memulakan, dapatkan pantulan.Jenis jenis antara muka. Ini dicapai dengan terlebih dahulu mendapatkan reflect.Jenis penuding nol kepada jenis antara muka menggunakan reflect.TypeOf((*FooService)(nil)). Kemudian, gunakan kaedah Elem() untuk memperoleh jenis asas, iaitu jenis antara muka itu sendiri.
  2. Lelaran Lebih Kaedah: Seterusnya, lelaran melalui kaedah jenis antara muka menggunakan gelung. Kaedah NumMethod() menyediakan kiraan kaedah dan Kaedah(i) mendapatkan semula kaedah ke-i.
  3. Ekstrak Nama Kaedah: Untuk setiap kaedah, ekstrak namanya menggunakan medan Nama daripada pantulan.Jenis kaedah. Senarai nama kaedah yang terhasil disimpan dalam kepingan s.

Atas ialah kandungan terperinci Bagaimanakah saya boleh mendapatkan semula nama kaedah secara pemrograman daripada jenis antara muka menggunakan pantulan dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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