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.
- Metodai su gavėjo reikšme (pvz.,
-
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.