Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Membuat Instanti Jenis Baharu dalam Go daripada Rentetan?

Bagaimanakah Saya Boleh Membuat Instanti Jenis Baharu dalam Go daripada Rentetan?

Patricia Arquette
Lepaskan: 2024-12-31 20:19:11
asal
403 orang telah melayarinya

How Can I Instantiate a New Type in Go from a String?

Jenis baharu contoh (Golang)

Dalam Go, mencipta tika baharu jenis daripada rentetan bukanlah tugas yang mudah. Penaipan statik dan mekanisme penghapusan kod mati Go menyukarkan untuk mencipta objek secara dinamik berdasarkan nama jenis yang disimpan sebagai rentetan.

Untuk menangani pengehadan ini, satu pendekatan ialah mengekalkan peta global[rentetan]reflect.Type. Peta ini boleh diisi dalam fungsi init() bagi pakej yang menentukan jenis yang boleh ditemui. Dengan menggunakan peta ini, anda boleh mencari reflect.Jenis jenis yang diingini dan gunakan reflect.Baharu untuk mendapatkan penunjuk kepada objek baharu jenis itu.

type MyStruct struct {
    // ...
}

func init() {
    register("MyStruct", reflect.TypeOf(MyStruct{}))
}
Salin selepas log masuk

Setelah mendaftar, anda boleh membuat contoh baharu menggunakan pantulan:

newObject := reflect.New(registered["MyStruct"]).Elem().Interface()
myStruct := newObject.(MyStruct)
Salin selepas log masuk

Walau bagaimanapun, adalah penting untuk mempertimbangkan bahawa pantulan boleh memperkenalkan overhed prestasi dan meningkatkan kerumitan kod anda. Ia mungkin lebih sesuai untuk meneroka pendekatan alternatif, seperti:

  • Kaedah kilang: Cipta objek melalui fungsi kilang yang dipratentukan yang mengembalikan tika jenis tertentu.
  • Pengaturcaraan dinamik: Gunakan antara muka dan pendaftaran masa jalan untuk mengendalikan penciptaan objek berdasarkan nama jenis yang disimpan dalam rentetan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membuat Instanti Jenis Baharu dalam Go daripada Rentetan?. 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