Sobes.tech
Middle+

Go dilində yerləşdirmə niyə irs deyil?

sobes.tech Süni İntellekt

AI-dan cavab

Go-da yerləşdirmə (embedding) bir strukturaya başqa bir strukturun sahələrini və metodlarını öz sahələri kimi istifadə etməyə imkan verir.

Əsas fərqlər:

  • Kompozisiya vs. Hierarxiya: Yerləşdirmə, bir strukturun başqa birinə sahib olduğu bir kompozisiya formasidir ("sahibdir"), burada bir struktur başqa birinə malikdir. Miras (klassik OOP-də) isə bir hierarxiya formasidir ("bir"), burada bir sinif başqa birinin alt sinfi olur.
  • Polimorfizm: Go, ənənəvi mənada mirasda olan alt tipli polimorfizmi dəstəkləmir. Polimorfizm Go-da interfeyslər vasitəsilə həyata keçirilir.
  • Əlçatanlıq: Yerləşdirmə, daxil olan strukturun görünən sahələri və metodlarına birbaşa əlçatanlıq təmin edir, lakin tip hierarxiyası yaratmır.
  • Yenidən yazma (override) yoxdur: Əsas sinifin metodlarının birbaşa "yenidən yazılması" mexanizmi yoxdur. Eyni adla metod təyin etmək mümkündür və bu, daxil olan metodu "gizləmiş" olur.

Yerləşdirmə nümunəsi:

package main

import "fmt"

type Engine struct {
	Cylinders int
}

func (e Engine) Start() {
	fmt.Println("Mühərrik başladı", e.Cylinders, "silindr")
}

type Car struct {
	Engine // Engine yerləşdirmə
	Brand  string
}

func main() {
	myCar := Car{
		Engine: Engine{Cylinders: 4},
		Brand:  "Toyota",
	}
	myCar.Start() // Engine-in Start metoduna Car vasitəsilə giriş
	fmt.Println("Maşının markası:", myCar.Brand)
	fmt.Println("Mühərrikin silindrləri:", myCar.Cylinders) // Engine-in Cylinders sahəsinə Car vasitəsilə giriş
}

Bu nümunədə, Car sahibdir Engine, amma Car Engine-in alt tipi deyil. Sadəcə Engine-in sahələrinə və metodlarına Car strukturu vasitəsilə rahatlıqla daxil oluruq.