Middle+
Kāpēc iekļaušana Go valodā nav mantošana?
sobes.tech AI
Atbilde no AI
Ieguldīšana (embedding) Go ļauj vienai struktūrai izmantot citas struktūras laukus un metodes it kā tās būtu tās pašas.
Galvenās atšķirības no mantošanas:
- Kompozīcija vs. Hierarhija: Ieguldīšana ir kompozīcijas forma ("ir"), kur viena struktūra ir cita. Mantošana (klasiskajā OOP) ir hierarhijas forma ("ir"), kur viena klase ir citas apakšklase.
- Polimorfisms: Go neatbalsta subtipu polimorfismu tradicionālajā mantošanas nozīmē. Polimorfisms Go tiek īstenots caur saskarnēm.
- Piekļuve: Ieguldīšana ļauj tieši piekļūt redzamiem laukiem un metodēm iekļautajā struktūrā caur ārējo struktūru, bet neveido tipu hierarhiju.
- Pārklāšana nav: Nav tieša mehānisma "pārklāt" bāzes klases metodes. Var definēt metodi ar to pašu nosaukumu ārējā struktūrā, kas "slēpj" iekļauto metodi.
Piemērs ar ieguldīšanu:
package main
import "fmt"
type Engine struct {
Cylinders int
}
func (e Engine) Start() {
fmt.Println("Motors ieslēgts ar", e.Cylinders, "cilindriem")
}
type Car struct {
Engine // Ieguldījums Engine
Brand string
}
func main() {
myCar := Car{
Engine: Engine{Cylinders: 4},
Brand: "Toyota",
}
myCar.Start() // Pieeja Engine Start metodēm caur Car
fmt.Println("Mašīnas zīmols:", myCar.Brand)
fmt.Println("Motora cilindru skaits:", myCar.Cylinders) // Pieeja Engine laukiem caur Car
}
Šajā piemērā Car būtībā ir Engine, bet Car nav Engine apakšklase. Mēs vienkārši ērti piekļūstam Engine laukiem un metodēm caur Car struktūru.