Middle+
Go tilida joylashtirish nima uchun meros emas?
sobes.tech AI
AIdan javob
Go'da embedding (qo'shish) bir tuzilma boshqa tuzilmaning maydonlari va metodlarini o'zining maydonlari kabi ishlatishga imkon beradi.
Asosiy farqlar:
- Kompozitsiya vs. Hierarxiya: Embedding — bu kompozitsiya shakli ("ega"), bunda bir tuzilma boshqa biriga ega. Merosxo'rlik (klassik OOPda) — bu hierarxiya shakli ("bu"), bunda bir sinf boshqasining subklassidir.
- Polimorfizm: Go an'anaviy merosxo'rlikdagi subtipli polimorfizmni qo'llab-quvvatlamaydi. Polimorfizm Go'da interfeyslar orqali amalga oshiriladi.
- Kirish: Embedding, tashqi tuzilma orqali ko'rinadigan maydonlar va metodlarga to'g'ridan-to'g'ri kirishni ta'minlaydi, ammo tur hierarxiyasini yaratmaydi.
- Overridden yo'q: Asosiy sinf metodlarini to'g'ridan-to'g'ri "o'zgartirish" mexanizmi mavjud emas. Siz tashqi tuzilmada xuddi shunday nom bilan metodni aniqlashingiz mumkin, bu esa ichki metodni "yashiradi".
Embedding misoli:
package main
import "fmt"
type Engine struct {
Cylinders int
}
func (e Engine) Start() {
fmt.Println("Motor ishga tushdi", e.Cylinders, "silindr")
}
type Car struct {
Engine // Engine embedding
Brand string
}
func main() {
myCar := Car{
Engine: Engine{Cylinders: 4},
Brand: "Toyota",
}
myCar.Start() // Engine metodiga Car orqali kirish
fmt.Println("Mashina brendi:", myCar.Brand)
fmt.Println("Motor silindrlari:", myCar.Cylinders) // Engine maydoniga Car orqali kirish
}
Ushbu misolda, Car ega Engine, lekin Car Engine ning subklasslari emas. Biz shunchaki Engine metodlari va maydonlariga Car strukturasidan qulay tarzda kirishamiz.