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

  1. 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
    }
    
  2. 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.