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

Susan Sarandon
Lepaskan: 2024-10-28 05:48:01
asal
382 orang telah melayarinya

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

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

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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!