Sobes.tech
Middle

Go'да объектке багытталган модел кандай түзүлгөн?

sobes.tech AI

AIден жооп

Go тилинде классикалык мурас алуу иерархиясы менен салттуу обьектке багытталган модел жок. Анын ордуна колдонулат:

  • Структуралар (Structs): Мейли, методдорсуз класс сыяктуу маалымат талааларын аныктайт.

    type Person struct {
        Name string
        Age  int
    }
    
  • Методдор: Белгилүү бир структурага байланышкан функциялар. Алар структурадан башка аныкталат.

    func (p Person) Greet() string {
        return "Hello, my name is " + p.Name
    }
    
    func (p *Person) CelebrateBirthday() {
        p.Age++
    }
    
    • Получатель-баалоо менен методдор (мисалы, (p Person)) структуранын көчүрмөсү менен иштейт.
    • Получатель-дарек менен методдор (мисалы, (p *Person)) оригинал структура менен иштейт жана анын талааларын өзгөртүүгө мүмкүндүк берет.
  • Интерфейстер: Методдордун сигнатураларынын топтому. Бардык методдорду ишке ашырган типтер автоматтык түрдө бул интерфейсти кабыл алат. Бул 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)     // Встроенная Person аркылуу Name талаасына жетүү
    fmt.Println(e.Greet())  // Встроенная Person аркылуу Greet методун чакыруу
    fmt.Println(e.GetID())  // Employee методун чакыруу
    

Ошентип, Go тилинде объектке багытталган модель структуралардын композициясына жана интерфейстер аркылуу аныкталган жүрүм-турумга негизделген, классикалык мурас алуу иерархиясына эмес.