როგორ არის მოწყობილი ობიექტზე ორიენტირებული მოდელი 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) // წვდომა ველზე Name შენაერთი Person-ის მეშვეობით fmt.Println(e.Greet()) // მეთოდის Greet გამოძახება შენაერთი Person-ის მეშვეობით fmt.Println(e.GetID()) // Employee-ის მეთოდის გამოძახება
ამგვარად, Go-ში ობიექტზე ორიენტირებული მოდელი დაფუძნებულია სტრუქტურების კომპოზიციასა და ინტერფეისებით განსაზღვრულ ქცევაზე, არა კლასიკური მემკვიდრეობის ჰიერჰიაზე.