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
Susan Sarandonasal
2024-11-24 00:47:10550semak imbas

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")
}

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{})

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{})

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!

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