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()
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()
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!