Middle+
Go тилинде жайгаштыруу эмне үчүн мурас эмес?
sobes.tech AI
AIден жооп
Goда орнотуу (embedding) бир структурага башка структуранын талаалары жана ыкмаларын өзүнүн өзгөчөлүктөрү катары колдонууга мүмкүндүк берет.
Негизги айырмачылыктар мурас менен:
- Кураштыруу vs. Иерархия: Орнотуу — бул кураштыруу формасы ("бар"), анда бир структура бар башка. Мурас (классикалык OOPде) — бул иерархия формасы ("бар"), анда бир класс кичинекей класс болуп саналат.
- Полифросификация: Go мурасында субтиптердин полиморфизмин салттуу мааниде колдобойт. Полифросификация Goда интерфейстер аркылуу ишке ашырылат.
- Кирүү: Орнотуу, көрүүгө боло турган талаалар жана ыкмаларды сырткы структура аркылуу түздөн-түз жеткиликтүү кылат, бирок түрлердин иерархиясын түзбөйт.
- Override жок: Базалык класстын ыкмаларын түздөн-түз "жазып" алуу механизми жок. Сиз бир эле аталыштагы ыкманы сырткы структурада аныктап, ал орнотулган ыкманы "жашырып" коюшуңуз мүмкүн.
Орнотуу мисалы:
package main
import "fmt"
type Engine struct {
Cylinders int
}
func (e Engine) Start() {
fmt.Println("Мотор ишке кирди", e.Cylinders, "цилиндр")
}
type Car struct {
Engine // Engine орнотуу
Brand string
}
func main() {
myCar := Car{
Engine: Engine{Cylinders: 4},
Brand: "Toyota",
}
myCar.Start() // Engineдин Start ыкмасына Car аркылуу жетүү
fmt.Println("Машинанын бренди:", myCar.Brand)
fmt.Println("Мотордун цилиндрлери:", myCar.Cylinders) // Engineдин Cylinders талаасына Car аркылуу жетүү
}
Бул мисалда, Car бар Engine, бирок Car Engineдин субклассы эмес. Биз жөн гана Engineдин талааларына жана ыкмаларына Car структурасы аркылуу ыңгайлуу жетебиз.