Bagaimana untuk Mendapatkan Nama Fungsi Menggunakan Reflection dalam Go?

Linda Hamilton
Lepaskan: 2024-11-08 10:55:02
asal
645 orang telah melayarinya

How to Retrieve a Function Name Using Reflection in Go?

Mengakses Nama Fungsi dengan Reflection in Go

Reflection in Go membolehkan pembangun mengintrospeksi jenis dan nilai mana-mana pembolehubah. Satu tugas biasa adalah untuk mendapatkan semula nama fungsi. Walau bagaimanapun, percubaan untuk mengakses kaedah Nama secara langsung pada jenis fungsi mungkin menghasilkan rentetan kosong.

Gelagat Jangkaan

Coretan kod yang disediakan mengimport yang diperlukan dengan betul pakej untuk refleksi. Walau bagaimanapun, isu ini timbul apabila cuba mendapatkan semula nama fungsi secara langsung daripada jenis.

name := typ.Name()
Salin selepas log masuk

Pendekatan ini tidak menghasilkan hasil yang diharapkan kerana kaedah Nama beroperasi pada penunjuk fungsi sebenar, bukan jenis. Untuk mendapatkan nama yang betul, fungsi FuncForPC daripada pakej runtime mesti digunakan.

Penyelesaian

Fungsi FuncForPC membawa penuding ke pantulan.Nilai fungsi dan mengembalikan objek *Fungsi. Objek ini menyediakan kaedah Nama yang betul, yang boleh digunakan untuk mendapatkan semula nama fungsi.

name := runtime.FuncForPC(reflect.ValueOf(main).Pointer()).Name()
Salin selepas log masuk

Menggunakan demonstrasi yang disediakan, kod kini akan mencetak "utama.utama" dengan betul. Jika hanya nama fungsi yang dikehendaki, ia boleh diekstrak dengan membelah rentetan yang dikembalikan.

Kesimpulan

Dengan menggunakan refleksi dan fungsi FuncForPC, pembangun boleh mendapatkan semula dengan tepat nama mana-mana fungsi dalam Go. Teknik ini membolehkan pelbagai kes penggunaan, seperti memeriksa struktur kod dan melaksanakan panggilan fungsi dinamik.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Nama Fungsi Menggunakan Reflection 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