Promowanie metod
Dziedzicz metody przez osadzanie
Promowanie metod to bezpłatna lekcja Go Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Go Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Go Academy zawiera 4 lekcji w sumie.
Dziedziczenie metod przez osadzanie
Po osadzeniu typu promowane są również jego metody. Typ zewnętrzny może wywoływać je tak, jakby sam je definiował — to odmiana dziedziczenia w Go.
Promowana metoda
Car osadza Engine i automatycznie zyskuje jego metodę Start.
package main
import "fmt"
type Engine struct{}
func (Engine) Start() { fmt.Println("engine started") }
type Car struct{ Engine }
func main() {
c := Car{}
c.Start()
}Metody działają na osadzonej wartości
Promowana metoda działa na osadzonym polu, a nie na zewnętrznej strukturze. Nie ma dostępu do pozostałych pól zewnętrznej struktury.
package main
import "fmt"
type Counter struct{ n int }
func (c *Counter) Inc() { c.n++ }
func (c Counter) Get() int { return c.n }
type Widget struct{ Counter }
func main() {
w := Widget{}
w.Inc()
w.Inc()
fmt.Println(w.Get())
}Przesłanianie metody
Należy zdefiniować metodę o tej samej nazwie w zewnętrznej strukturze, aby przesłonić promowaną metodę. Metoda zewnętrzna ma pierwszeństwo.
package main
import "fmt"
type Animal struct{}
func (Animal) Speak() string { return "..." }
type Dog struct{ Animal }
func (Dog) Speak() string { return "Woof" }
func main() {
fmt.Println(Dog{}.Speak())
}Wywoływanie wersji osadzonej
Nawet po przesłonięciu można nadal uzyskać dostęp do oryginalnej metody za pomocą nazwy osadzonego typu.
package main
import "fmt"
type Animal struct{}
func (Animal) Speak() string { return "generic" }
type Dog struct{ Animal }
func (d Dog) Speak() string { return "Woof + " + d.Animal.Speak() }
func main() {
fmt.Println(Dog{}.Speak())
}Promowanie a interfejsy
Ponieważ promowane metody należą do zbioru metod typu zewnętrznego, typ zewnętrzny może spełniać wymagania interfejsów dzięki metodom osadzonego typu.
package main
import "fmt"
type Stringer interface{ String() string }
type Base struct{ name string }
func (b Base) String() string { return b.name }
type Wrapper struct{ Base }
func main() {
var s Stringer = Wrapper{Base{"hi"}}
fmt.Println(s.String())
}Zbiory metod wskaźnika i wartości
Jeśli osadzony typ ma metody z odbiorcą wskaźnikowym, tylko wskaźnik do zewnętrznej struktury (lub adresowalna wartość) otrzymuje te promowane metody w swoim zbiorze metod.
Osadzanie w celu zapewnienia domyślnego zachowania
Należy osadzić typ udostępniający rozsądne metody domyślne, a następnie przesłonić tylko te nieliczne, które wymagają dostosowania — to potężny wzorzec ponownego użycia.
package main
import "fmt"
type DefaultHandler struct{}
func (DefaultHandler) Handle() string { return "default" }
type CustomHandler struct{ DefaultHandler }
func (CustomHandler) Handle() string { return "custom" }
func main() {
fmt.Println(CustomHandler{}.Handle())
}Brak prawdziwego polimorfizmu
W przeciwieństwie do klasycznego OOP osadzona metoda nie wywołuje z powrotem przesłonięcia zewnętrznego. Go nie obsługuje wirtualnego wysyłania metod przez osadzanie.
Promowanie przez wiele poziomów
Metody są promowane przechodnio: jeśli A osadza B, a B osadza C, A również zyskuje metody C, o ile nie występuje niejednoznaczność.
Kiedy promowanie pomaga
- Ponowne używanie zachowania bez przepisywania kodu
- Udostępnianie wartości domyślnych, które można przesłonić
- Spełnianie wymagań interfejsów za pomocą osadzonych metod
Szybki test
Proszę sprawdzić swoją wiedzę o promowaniu metod.
Podsumowanie
Poznali Państwo promowanie metod.
- Osadzone metody są promowane do zewnętrznego typu
- Metody zewnętrzne przesłaniają promowane metody
- Do oryginalnej metody można uzyskać dostęp przez nazwę osadzonego typu
- Promowanie pomaga spełniać wymagania interfejsów, ale nie zapewnia wirtualnego wysyłania metod
Często zadawane pytania
Czy lekcja „Promowanie metod” jest bezpłatna?
Tak — pełny tekst „Promowanie metod” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Go Academy, przejdź na CoddyKit PRO. Kurs Go Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Promowanie metod”?
Dziedzicz metody przez osadzanie Ćwiczysz Go Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Go Academy?
Nie wymagamy żadnego doświadczenia. Go Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Promowanie metod”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Go Academy?
Tak. Każda lekcja Go Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.