Sobes.tech
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.