Sobes.tech
Middle

Kaip yra sukonstruotas objektinio modelio Go?

sobes.tech AI

Atsakymas iš AI

Go nėra tradicinės objektų orientuotos modelio su giliomis paveldėjimo hierarchijomis. Vietoje to naudojami:

  • Struktūros (Structs): Apibrėžia duomenų laukus, panašiai kaip klasės be metodų.

    type Person struct {
        Name string
        Age  int
    }
    
  • Metodai: Funkcijos, susietos su tam tikra struktūra. Jie apibrėžiami atskirai nuo struktūros.

    func (p Person) Greet() string {
        return "Hello, my name is " + p.Name
    }
    
    func (p *Person) CelebrateBirthday() {
        p.Age++
    }
    
    • Metodai su gavėjo reikšme (pvz., (p Person)) dirba su struktūros kopija.
    • Metodai su gavėjo nuoroda (pvz., (p *Person)) dirba su originalia struktūra ir leidžia keisti jos laukus.
  • Sąsajos (Interfaces): Metodų parašų rinkinys. Tipai, įgyvendinantys visas sąsajos metodus, automatiškai atitinka šią sąsają. Tai yra polimorfizmo pagrindas Go.

    type Greeter interface {
        Greet() string
    }
    
    // Person automatiškai įgyvendina Greeter
    
  • Kompozicija (Įterpimas): Vietoje paveldėjimo, viena struktūra gali įterpti kitą struktūrą, gaudama prieigą prie jos laukų ir metodų.

    type Employee struct {
        Person // Įterpiame Person struktūrą
        ID     string
    }
    
    func (e Employee) GetID() string {
        return e.ID
    }
    

    Įterpti laukai ir metodai yra prieinami tiesiogiai:

    e := Employee{
        Person: Person{Name: "Alice", Age: 30},
        ID:     "E123",
    }
    fmt.Println(e.Name)     // Prieiga prie lauko Name per įterptą Person
    fmt.Println(e.Greet())  // Metodo Greet iškvietimas per įterptą Person
    fmt.Println(e.GetID())  // Employee metodo iškvietimas
    

Taip, objektų orientuotas modelis Go yra pagrįstas struktūrų kompozicija ir elgesiu, apibrėžtu sąsajomis, o ne klasikinės paveldėjimo hierarchijos.