Junior
Golangda merosxo'rlik qanday amalga oshiriladi?
sobes.tech AI
AIdan javob
Go'da an'anaviy sinf merosxo'rligi mavjud emas, masalan, Java yoki C++ da. O'rniga, ikki mexanizm ishlatiladi:
-
Embedding (Qo'shish):
- Qo'shish, bir strukturani yoki turini boshqasiga joylashtirish imkonini beradi.
- Joylashtirilgan tur "o'z" maydonlari va metodlarini joylashtiruvchi turga "uzatadi".
- Joylashtirilgan turdagi maydonlar va metodlarga to'g'ridan-to'g'ri kirish mumkin, ular joylashtiruvchi turda belgilangan kabi.
- Bu merosxo'rlikga o'xshash, lekin qulayroq kirish sintaksisi bilan kompozitsiyani taqlid qiladi.
package main import "fmt" type Engine struct { Type string } func (e Engine) Start() { fmt.Println(e.Type, "dvigatel ishga tushdi") } type Car struct { Engine // Engine strukturasi joylashtirilishi Model string } func main() { car := Car{ Engine: Engine{Type: "V8"}, Model: "Mustang", } // Joylashtirilgan strukturadagi maydonlar va metodlarga to'g'ridan-to'g'ri kirish fmt.Println("Mashina modeli:", car.Model) car.Start() // Joylashtirilgan strukturadagi metodni chaqirish } -
Interfeyslar:
- Interfeyslar, bir tur bajarishi kerak bo'lgan metodlar to'plamini belgilaydi.
- Ular "xulq-atvor" ni belgilaydi, ma'lumotlar tuzilmasini emas.
- Tur, interfeysni bajarishini aniq e'lon qilish shart emas; faqat interfeysda belgilangan barcha metodlarni bajarish kifoya.
- Interfeyslar polimorfizmni ta'minlaydi.
package main import "fmt" type Speaker interface { Speak() } type Dog struct { Name string } func (d Dog) Speak() { fmt.Println(d.Name, "diydi Woof!") } type Cat struct { Name string } func (c Cat) Speak() { fmt.Println(c.Name, "diydi Miau!") } func main() { animals := []Speaker{ Dog{Name: "Buddy"}, Cat{Name: "Whiskers"}, } for _, animal := range animals { animal.Speak() // Polimorfik chaqiriq } }
Joylashtirish va interfeyslarning kombinatsiyasi Go'ga kodni takrorlash va uni qayta ishlash uchun moslashuvchanlikni ta'minlaydi, an'anaviy meros bilan bog'liq murakkabliklar va muammalarsiz (masalan, "olma" muammosi). Go'da, kompozitsiya va interfeyslar meroslik hierarhiyalariga qaraganda afzalroq.