Sobes.tech
Middle

Модели объектӣ дар Go чӣ гуна сохта шудааст?

sobes.tech AI

Ҷавоб аз AI

В Go няма традиционен обектно-ориентиран модел с дълбока йерархия на наследяване на класове. Вместо това се използват:

  • Структури (Structs): Определят полета данни, подобно на класове без методи.

    type Person struct {
        Name string
        Age  int
    }
    
  • Методи: Функции, свързани с определена структура. Те се дефинират отделно от структурата.

    func (p Person) Greet() string {
        return "Здравейте, казвам се " + p.Name
    }
    
    func (p *Person) CelebrateBirthday() {
        p.Age++
    }
    
    • Методи с приемник стойност (например (p Person)) работят с копие на структурата.
    • Методи с приемник указател (например (p *Person)) работят с оригинала на структурата, позволявайки да се променят полетата й.
  • Интерфейси (Interfaces): Набори от сигнатури на методи. Типовете, които реализират всички методи на интерфейса, неявно го изпълняват. Това е основата на полиморфизма в Go.

    type Greeter interface {
        Greet() string
    }
    
    // Person неявно реализира Greeter
    
  • Композиция (Вграждане): Вместо наследяване, една структура може да вгражда друга структура, получавайки достъп до полетата и методите й.

    type Employee struct {
        Person // Вграждаме структурата Person
        ID     string
    }
    
    func (e Employee) GetID() string {
        return e.ID
    }
    

    Вградените полета и методи са достъпни директно:

    e := Employee{
        Person: Person{Name: "Alice", Age: 30},
        ID:     "E123",
    }
    fmt.Println(e.Name)     // Достъп до полето Name чрез вградена Person
    fmt.Println(e.Greet())  // Викаме метода Greet чрез вградена Person
    fmt.Println(e.GetID())  // Викаме метода Employee
    

По този начин, обектно-ориентираният модел в Go се базира на композицията на структури и поведението, определено чрез интерфейси, а не на класическа йерархия на наследяване.