Go and Inheritance: Meneroka Alternatif kepada Pelanjutan Kelas
Dalam Go, konsep pewarisan melalui sambungan kelas tidak disokong secara langsung. Ini menimbulkan cabaran apabila menyasarkan untuk mencipta "kelas induk" dengan fungsi dikongsi yang boleh "dilanjutkan" oleh kelas lain.
Komposisi berbanding Warisan
Go menggalakkan komposisi berakhir warisan, mempromosikan idea menggabungkan antara muka dan struktur untuk mencapai kefungsian yang diingini. Pendekatan ini membolehkan fleksibiliti dan kebolehujian yang lebih besar.
Menggunakan Struktur dan Antara Muka Terbenam
Satu teknik berkesan untuk membolehkan penggunaan semula kod sambil mengekalkan semangat pewarisan adalah melalui penggunaan struct dan antara muka terbenam. Corak ini melibatkan penciptaan antara muka sempit yang mentakrifkan set kaedah tertentu. Antara muka ini kemudiannya boleh digubah bersama menjadi antara muka yang lebih kompleks, membentuk struktur hierarki.
Begitu juga, struct boleh digubah menggunakan struct terbenam, di mana satu struct boleh memasukkan yang lain sebagai ahli. Ini membenarkan penggunaan semula kod dan menyediakan cara yang fleksibel untuk membuat kelas dengan fungsi yang dikongsi dan diperluaskan.
Contoh:
Pertimbangkan contoh berikut:
type Reader interface { Read(p []byte) (n int, err error) } type Writer interface { Write(p []byte) (n int, err error) } type ReadWriter interface { Reader Writer } type MyReader struct{} func (r *MyReader) Read(p []byte) (n int, err error) { // Implementation of Read method } type MyWriter struct{} func (w *MyWriter) Write(p []byte) (n int, err error) { // Implementation of Write method } type MyReadWriter struct { *MyReader *MyWriter }
Dalam contoh ini, antara muka Pembaca dan Penulis mentakrifkan fungsi asas untuk membaca dan menulis data. Antara muka ReadWriter menyusun antara muka ini, mewakili kelas yang boleh melaksanakan kedua-dua operasi. Struktur MyReadWriter mengarang kedua-dua MyReader dan MyWriter, membenarkannya untuk melaksanakan antara muka ReadWriter dan mewarisi kefungsiannya.
Dengan menggunakan pendekatan ini, anda boleh mengelakkan struktur bulat berbelit yang timbul dalam model warisan tradisional dan mencapai fleksibiliti yang diingini dan penggunaan semula kod tanpa melanggar prinsip Go.
Atas ialah kandungan terperinci Bagaimana Boleh Mencapai Tingkah Laku Seperti Warisan Tanpa Sambungan Kelas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!