Rumah > pembangunan bahagian belakang > Golang > Bolehkah Anda Menggunakan Kaedah Struct dalam Go Menggunakan Hanya Nama Rentetannya Melalui Refleksi?

Bolehkah Anda Menggunakan Kaedah Struct dalam Go Menggunakan Hanya Nama Rentetannya Melalui Refleksi?

Susan Sarandon
Lepaskan: 2024-11-24 00:47:10
asal
535 orang telah melayarinya

Can You Invoke a Struct Method in Go Using Only Its String Name Through Reflection?

Refleksi: Mengakses Structs by String

Pertimbangkan senario di mana anda mempunyai struct dengan kaedah tertentu:

type MyStruct struct {
}

func (a *MyStruct) AAction() {
    fmt.Println("Hello a")
}
Salin selepas log masuk

Untuk menggunakan kaedah AAction secara dinamik menggunakan refleksi, anda boleh melakukan perkara berikut (sah pendekatan):

reflect.New(reflect.TypeOf(MyStruct{})).MethodByName("AAction").Call([]reflect.Value{})
Salin selepas log masuk

Walau bagaimanapun, menggunakan MyStruct{} sebagai ungkapan bukanlah pendekatan yang anda inginkan. Sebaliknya, anda ingin menentukan nama struct sebagai rentetan. Pendekatan ini tidak boleh diakses pada masa ini:

theStruct := "MyStruct"
theAction := "AAction"
reflect.New(reflect.TypeOf(theStruct)).MethodByName(theAction).Call([]reflect.Value{})
Salin selepas log masuk

Malangnya, percubaan ini cacat kerana reflect.TypeOf(theStruct) akan menghasilkan rentetan jenis.

Berdasarkan penyelidikan anda, anda mengalami perkara yang serupa soalan mengenai menggunakan kaedah struct dengan nama menggunakan rentetan. Walau bagaimanapun, pendekatan padanan rentetan yang dicadangkan bukanlah penyelesaian yang berdaya maju.

Jawapan:

Walaupun aspirasi anda, adalah tidak mungkin untuk memohon kaedah struct menggunakan hanya rentetan yang mewakili nama struct. Ini adalah benar kerana pantulan memerlukan nilai konkrit jenis yang dipersoalkan untuk beroperasi. Tanpa nilai, tiada cara untuk berinteraksi dengan struct atau kaedahnya.

Untuk mencapai kefungsian yang anda inginkan, anda perlu mengekalkan pendaftaran tersuai yang memetakan nama struct kepada jenis yang sepadan. Pendaftaran ini akan membolehkan anda mendapatkan semula jenis berdasarkan nama rentetan dan kemudian menggunakan refleksi seperti biasa. Walau bagaimanapun, pendekatan ini memerlukan usaha tambahan dan mungkin tidak sesuai dalam semua senario.

Atas ialah kandungan terperinci Bolehkah Anda Menggunakan Kaedah Struct dalam Go Menggunakan Hanya Nama Rentetannya Melalui 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