Sobes.tech
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 структурасы аркылуу ыңгайлуу жетебиз.