Sobes.tech
Middle

Kā ir uzbūvēts objektorientētais modelis Go?

sobes.tech AI

Atbilde no AI

Go nav tradicionālais objektorientētais modelis ar dziļām mantošanas hierarhijām. Tā vietā tiek izmantots:

  • Struktūras (Structs): Definē datu laukus, līdzīgi kā klases bez metodēm.

    type Person struct {
        Name string
        Age  int
    }
    
  • Metodes: Funkcijas, kas ir saistītas ar noteiktu struktūru. Tās tiek definētas atsevišķi no struktūras.

    func (p Person) Greet() string {
        return "Hello, my name is " + p.Name
    }
    
    func (p *Person) CelebrateBirthday() {
        p.Age++
    }
    
    • Metodes ar saņēmēja vērtību (piem., (p Person)) darbojas ar struktūras kopiju.
    • Metodes ar saņēmēja norādi (piem., (p *Person)) darbojas ar oriģinālo struktūru un ļauj mainīt tās laukus.
  • Saskares (Interfaces): Metožu parakstu kopums. Tipi, kas īsteno visas metodes no saskares, automātiski apmierina šo saskari. Tas ir polimorfisma pamats Go.

    type Greeter interface {
        Greet() string
    }
    
    // Person automātiski īsteno Greeter
    
  • Kompozīcija (Iekļaušana): Tā vietā, lai mantošana, viena struktūra var iekļaut citu struktūru, iegūstot piekļuvi tās laukiem un metodēm.

    type Employee struct {
        Person // Iekļaujam Person struktūru
        ID     string
    }
    
    func (e Employee) GetID() string {
        return e.ID
    }
    

    Iekļautie lauki un metodes ir pieejami tieši:

    e := Employee{
        Person: Person{Name: "Alice", Age: 30},
        ID:     "E123",
    }
    fmt.Println(e.Name)     // Piekļuve laukam Name caur iekļauto Person
    fmt.Println(e.Greet())  // Metodes Greet izsaukšana caur iekļauto Person
    fmt.Println(e.GetID())  // Employee metodes izsaukšana
    

Tādējādi, objektorientētais modelis Go ir balstīts uz struktūru kompozīciju un uzvedību, kas definēta ar saskarnēm, nevis uz klasisko mantošanas hierarhiju.