Bekas Generik untuk Mempelbagaikan Jenis Masa Jalan dalam Go
Artikel ini menangani cabaran menghantar data merentas saluran ke goroutine yang akan memproses selanjutnya ia, dengan keperluan bahawa saluran mengendalikan semua jenis. Kami menyiasat penggunaan generik yang diperkenalkan dalam Go 1.18 untuk menangani keperluan ini.
Mentakrifkan Bekas Generik
Matlamatnya adalah untuk mencipta saluran generik yang menerima sebarang jenis data . Walau bagaimanapun, usaha awal kami menggunakan generik menghadapi ralat kompilasi kerana ketidakupayaan untuk membuat instantiate saluran generik tanpa jenis tertentu.
Menggunakan Antara Muka{} Daripada Generik
Satu penyelesaian yang berpotensi ialah menggantikan generik dengan jenis antara muka{}, yang boleh menyimpan sebarang nilai data. Walau bagaimanapun, pendekatan ini memperkenalkan kerumitan dan cabaran menghuraikan apabila menangani struktur bersarang yang kompleks.
Memahami Generik
Masalahnya berpunca daripada salah faham penggunaan generik yang dimaksudkan dalam konteks ini. Walaupun kami mungkin menginginkan saluran yang boleh menerima apa-apa jenis, ini tidak boleh dicapai dengan saluran generik.
Penggunaan Generik yang Betul
Secara amnya, apabila berurusan dengan generik, kami mentakrifkan jenis berparameter seperti chan T dan mentakrifkannya dengan parameter jenis konkrit sebelum menggunakannya. Sebagai contoh, kami akan mencipta saluran konkrit seperti berikut:
c := make(chan int)
Penyelesaian untuk Jenis Data Dinamik
Untuk mengendalikan variasi jenis data masa jalan, kami boleh menggunakan saluran dengan antara muka{} sebagai jenisnya:
c := make(chan interface{})
Dalam kes ini, kami menghantar data ke saluran dan melaksanakan penegasan jenis atau lain-lain pengendalian untuk menangani jenis data yang berbeza-beza.
Atas ialah kandungan terperinci Bagaimanakah Go Generics Boleh Mengendalikan Jenis Data Masa Jalan yang Berbeza-beza dalam Saluran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!