Rumah > pembangunan bahagian belakang > Golang > Mengapa Saya Tidak Boleh Mendapatkan Nama Parameter Kaedah Go Menggunakan Refleksi?

Mengapa Saya Tidak Boleh Mendapatkan Nama Parameter Kaedah Go Menggunakan Refleksi?

Susan Sarandon
Lepaskan: 2024-12-22 08:37:09
asal
1042 orang telah melayarinya

Why Can't I Get the Name of a Go Method Parameter Using Reflection?

Mendapatkan Nama Parameter Kaedah

Apabila bekerja dengan kaedah Go, mungkin wajar untuk mendapatkan nama parameter tertentu. Contohnya, untuk kaedah berikut:

func (t *T) TMethod(data *testData) (interface{}, *error) {
    ...
}
Salin selepas log masuk

ingin mendapatkan nama data parameter. Walau bagaimanapun, menggunakan kod pantulan berikut mengembalikan nama struct testData:

reflect.ValueOf(T).MethodByName("TMethod").Type.In(0).Elem().Name()
Salin selepas log masuk

Mengapa saya tidak boleh mendapatkan nama parameter?

Sebenarnya, dalam bahasa Go, tiada cara untuk mendapatkan nama fungsi atau parameter kaedah. Ini kerana, kepada pemanggil, nama parameter tidak penting. Yang penting hanyalah jenis dan susunan parameter.

Jenis fungsi mewakili koleksi semua fungsi dengan parameter dan jenis hasil yang sama. Jika dua fungsi mempunyai parameter dan jenis hasil yang sama, jenisnya adalah sama, tanpa mengira nama parameter. Kod berikut akan dicetak benar:

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

fmt.Println(reflect.TypeOf(f1) == reflect.TypeOf(f2))
Salin selepas log masuk

Malah mungkin untuk mencipta fungsi atau kaedah yang tidak memberikan nama parameternya (sama ada semua atau tiada nama terdapat dalam senarai parameter atau hasil). Kod berikut berfungsi:

func NamelessParams(int, string) {
    fmt.Println("NamelessParams called")
}
Salin selepas log masuk

Penyelesaian

Jika anda ingin mencipta rangka kerja parameter bernama yang memetakan parameter API masuk ke parameter fungsi/kaedah Go, anda boleh Gunakan struct kerana anda boleh mendapatkan medan bernama menggunakan pakej reflect (seperti Value.FieldByName() dan Type.FieldByName()), atau anda boleh menggunakan peta. Lihat soalan berkaitan berikut:

Memulakan medan fungsi

Untuk butiran dan contoh, lihat artikel berkaitan pada senarai mel Google:

Adakah argumen yang tidak dinamakan benar dalam Go wujud?

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Mendapatkan Nama Parameter Kaedah Go Menggunakan Refleksi?. 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