Rumah >pembangunan bahagian belakang >Golang >Mengapa Saya Tidak Boleh Dapatkan Nama Parameter daripada `reflect.TypeOf` Go?

Mengapa Saya Tidak Boleh Dapatkan Nama Parameter daripada `reflect.TypeOf` Go?

Barbara Streisand
Barbara Streisandasal
2024-12-21 18:22:11201semak imbas

Why Can't I Get Parameter Names from Go's `reflect.TypeOf`?

Merefleksikan Nama Parameter dalam Go

Seseorang selalunya ingin menentukan nama parameter kaedah Go. Walau bagaimanapun, selepas cuba mendapatkan maklumat ini melalui fungsi TMethod, pengguna mendapati bahawa hanya nama struktur dikembalikan (testData dalam kes ini).

Memahami Ketiadaan Nama Parameter

Dalam Go, nama kaedah atau parameter fungsi tidak disimpan secara eksplisit dalam maklumat masa jalan. Ini kerana nama parameter tidak dianggap penting untuk pemanggil kaedah atau fungsi. Tumpuan adalah pada jenis parameter dan susunannya.

Dua fungsi dengan parameter dan jenis hasil yang sama mempunyai jenis yang sama, tanpa mengira nama parameternya. Contohnya:

func f1(a int) {}
func f2(b int) {}

fmt.Println(reflect.TypeOf(f1) == reflect.TypeOf(f2)) // Prints true

Pendekatan Alternatif untuk Penamaan Parameter

Jika fungsi yang diingini adalah untuk mencipta rangka kerja untuk memanggil fungsi dengan parameter "bernama", pendekatan alternatif wujud :

  • Menggunakan struct: Dinamakan medan boleh diperoleh menggunakan kaedah Value.FieldByName() dan Type.FieldByName() refleksi.
  • Menggunakan peta: Nilai parameter boleh dipetakan kepada nama masing-masing.

Lagi Insights

Untuk maklumat dan contoh yang lebih terperinci, rujuk sumber berikut:

  • [Adakah hujah yang tidak dinamakan satu perkara dalam Pergi?](https://stackoverflow.com/questions/72503238/is-unnamed-arguments-a-thing-in-go)
  • [Memulakan medan fungsi](https://stackoverflow.com/ questions/47924187/initialize-function-fields)
  • [Perbincangan yang berkaitan tentang mel kacang golang list](https://groups.google.com/g/golang-nuts/c/wlyXOha-asQ)

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Dapatkan Nama Parameter daripada `reflect.TypeOf` 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