Dalam Go, melanjutkan kefungsian melangkaui struktur asas sering didekati menggunakan gubahan dan bukannya warisan. Ini memastikan kejelasan kod dan meminimumkan pertindihan.
Pertimbangkan contoh berikut di mana matlamatnya adalah untuk mentakrifkan struct asas dengan kaedah yang boleh dilanjutkan oleh struct lain:
type MyInterface interface { SomeMethod(string) OtherMethod(string) } type Base struct { B MyInterface } func (b *Base) SomeMethod(x string) { b.B.OtherMethod(x) } type Extender struct { Base } func (b *Extender) OtherMethod(x string) { // Do something... } func NewExtender() *Extender { e := Extender{} e.Base.B = &e return &e }
Sementara contoh ini berfungsi , ia kelihatan berbelit kerana struktur kitarannya. Untuk mengurangkan pertindihan kod dan mencipta kod yang lebih mudah dibaca, pertimbangkan untuk menggunakan pembenaman.
Pembenaman membolehkan anda mengarang struktur yang melaksanakan antara muka tertentu. Sebagai contoh, anda boleh mencipta antara muka yang sempit untuk membaca dan menulis:
type Reader interface { Read(p []byte) (n int, err error) } type Writer interface { Write(p []byte) (n int, err error) }
Dengan mengarang antara muka ini, anda boleh mencipta antara muka ReadWriter:
type ReadWriter interface { Reader Writer }
Begitu juga, anda boleh mengarang struct yang laksanakan Pembaca dan Penulis ke dalam struct MyReadWriter:
type MyReader struct {} func (r *MyReader) Read(p []byte) (n int, err error) { // Implements Reader interface. } type MyWriter struct {} func (w *MyWriter) Write(p []byte) (n int, err error) { // Implements Writer interface. } type MyReadWriter struct { *MyReader *MyWriter }
The MyReadWriter struct kini melaksanakan antara muka ReadWriter, membolehkan anda menggunakan mana-mana komponen yang melaksanakan Reader atau Writer dalam struct ini.
Teknik benam ini menggalakkan kebolehgunaan semula kod, suntikan kebergantungan dan memudahkan ujian dengan mendayakan pertukaran komponen yang melaksanakan antara muka khusus.
Atas ialah kandungan terperinci Pergi dan Warisan: Bilakah Komposisi Mengungguli Warisan untuk Kebolehgunaan Semula Kod?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!