Junior
Golang-da irsiyyət necə həyata keçirilir?
sobes.tech Süni İntellekt
AI-dan cavab
Go-da ənənəvi sinif irsi yoxdur, məsələn, Java və ya C++-da. Əvəzində, iki mexanizm istifadə olunur:
-
Embedding (Yerləşdirmə):
- Yerləşdirmə, bir strukturu və ya tipi başqa birinə daxil etməyə imkan verir.
- Yerləşdirilmiş tip, öz sahələrini və metodlarını yerləşdirən tipe "keçirir".
- Yerləşdirilmiş tipin sahələrinə və metodlarına birbaşa giriş mümkündür, sanki onlar yerləşdirən tipdə müəyyən edilmişdir.
- Bu, irsi təqlid edir, lakin daha rahat giriş sintaksisi ilə, irsi kimi.
package main import "fmt" type Engine struct { Type string } func (e Engine) Start() { fmt.Println(e.Type, "mühərrik işə düşdü") } type Car struct { Engine // Engine strukturunun yerləşdirilməsi Model string } func main() { car := Car{ Engine: Engine{Type: "V8"}, Model: "Mustang", } // Birbaşa daxil olmaq üçün yerləşdirilmiş strukturun sahələrinə və metodlarına fmt.Println("Maşının modeli:", car.Model) car.Start() // Yerləşdirilmiş strukturun metodunu çağırmaq } -
Interfeysler:
- Interfeysler, bir tipin həyata keçirməli olduğu metodlar toplusunu müəyyən edir.
- Onlar "davranış" təyin edir, məlumat strukturu deyil.
- Tip, interfeysi açıq şəkildə elan etməli deyil; yalnız interfeysdə müəyyən olunan bütün metodları həyata keçirməlidir.
- Interfeysler, çox biçimlilik təmin edir.
package main import "fmt" type Speaker interface { Speak() } type Dog struct { Name string } func (d Dog) Speak() { fmt.Println(d.Name, "diyir Woof!") } type Cat struct { Name string } func (c Cat) Speak() { fmt.Println(c.Name, "diyir Miau!") } func main() { animals := []Speaker{ Dog{Name: "Buddy"}, Cat{Name: "Whiskers"}, } for _, animal := range animals { animal.Speak() // Polimorfik çağırış } }
Yerləşdirmə və interfeyslərin birləşməsi, Go-nun kodun çevikliyini və təkrar istifadə imkanını təmin edir, ənənəvi irsi ilə əlaqəli mürəkkəbliklər və problemlər olmadan (məsələn, "elmas" problemi). Go-da, kompozisiya və interfeyslər irsi hierarxiyalarına üstünlük verilir.