Amalan Terbaik untuk Kesatuan dalam Go
Go kekurangan kesatuan, walaupun sifatnya di mana-mana dalam pengaturcaraan. Untuk menangani ciri yang hilang ini, pelbagai pendekatan telah muncul.
Satu pendekatan biasa melibatkan penentuan struktur berasingan untuk setiap jenis yang mungkin dalam kesatuan dan menyimpan salah satu daripada struktur tersebut dalam antara muka bekas. Kaedah ini menawarkan keselamatan jenis, tetapi memperkenalkan lebihan kod yang ketara. Seperti yang dilihat dalam contoh yang disediakan, pelbagai fungsi pembina, predikat dan pemeroleh diperlukan untuk setiap jenis dalam kesatuan.
Untuk mengurangkan lebihan ini, pertimbangkan untuk menentukan antara muka yang menandakan objek sebagai milik kesatuan. Ini membenarkan fungsi untuk beroperasi pada elemen Pelbagai tanpa menyatakan jenis konkritnya sehingga kemudian.
Contohnya:
type Misc interface { ImplementsMisc() } type Comment Chars func (c Comment) ImplementsMisc() {} type ProcessingInstruction func (p ProcessingInstruction) ImplementsMisc() {}
Dengan pendekatan ini, fungsi boleh mengendalikan objek Pelbagai secara umum:
func HandleMisc(m Misc) { switch m.(type) { case Comment: fmt.Println("It's a comment") case ProcessingInstruction: fmt.Println("It's a processing instruction") } }
Walaupun kaedah ini menyediakan beberapa tahap pemudahan, ia masih memerlukan penegasan jenis untuk mengakses jenis sebenar objek.
Untuk meniru kesatuan sebenar, contoh yang disediakan mewakili pendekatan pilihan. Walau bagaimanapun, ia memperkenalkan redundansi kod. Malangnya, tiada cara yang diterima secara universal untuk memudahkan proses ini dalam Go.
Atas ialah kandungan terperinci Bagaimanakah Kita Boleh Mensimulasikan Kesatuan dengan Berkesan dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!