0Pricing
Go Academy · Lekcja

Osadzanie interfejsów

Komponuj interfejsy

Osadzanie interfejsów to bezpłatna lekcja Go Academy na CoddyKit. To lekcja 2 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.

Komponowanie interfejsów

Interfejsy mogą osadzać inne interfejsy, łącząc ich zbiory metod w większy kontrakt. Biblioteka standardowa korzysta z tego mechanizmu w wielu miejscach.

Składnia osadzania

Aby uwzględnić wszystkie metody interfejsu, należy wymienić jego typ wewnątrz innego interfejsu.

package main

import "fmt"

type Reader interface{ Read() string }
type Writer interface{ Write(s string) }
type ReadWriter interface {
	Reader
	Writer
}

func main() {
	var rw ReadWriter
	fmt.Println(rw == nil)
}

io.ReadWriter w praktyce

Klasycznym przykładem jest io.ReadWriter, zdefiniowany jako osadzenie io.Reader i io.Writer. Każdy typ mający obie metody spełnia wymagania tego interfejsu.

Spełnianie wymagań złożonego interfejsu

Typ konkretny implementuje złożony interfejs po prostu przez posiadanie wszystkich wymaganych metod.

package main

import "fmt"

type Reader interface{ Read() string }
type Writer interface{ Write(s string) }
type ReadWriter interface {
	Reader
	Writer
}

type File struct{ data string }

func (f *File) Read() string  { return f.data }
func (f *File) Write(s string) { f.data = s }

func main() {
	var rw ReadWriter = &File{}
	rw.Write("hi")
	fmt.Println(rw.Read())
}

Po co komponować interfejsy

Małe interfejsy łatwo implementować i testować. Komponowanie ich pozwala tworzyć większe kontrakty tylko tam, gdzie są potrzebne, zachowując minimalny zakres każdego elementu.

Budowanie z małych elementów

Należy definiować ukierunkowane interfejsy jednowyrazowe, a następnie je łączyć.

package main

import "fmt"

type Opener interface{ Open() }
type Closer interface{ Close() }
type OpenCloser interface {
	Opener
	Closer
}

type Door struct{}

func (Door) Open()  { fmt.Println("opened") }
func (Door) Close() { fmt.Println("closed") }

func main() {
	var oc OpenCloser = Door{}
	oc.Open()
	oc.Close()
}

Brak zduplikowanych metod

Osadzone interfejsy nie mogą wnosić nakładających się metod o sprzecznych sygnaturach; identyczne zbiory metod są dozwolone we współczesnym Go.

Przyjmowanie wąskich interfejsów

Funkcje powinny wymagać najmniejszego interfejsu, którego potrzebują. Należy przyjąć io.Reader, a nie io.ReadWriteCloser, jeśli funkcja tylko odczytuje dane.

package main

import "fmt"

type Reader interface{ Read() string }

func dump(r Reader) { fmt.Println(r.Read()) }

type Buf struct{}

func (Buf) Read() string { return "data" }

func main() {
	dump(Buf{})
}

Rodzina io

Biblioteka standardowa łączy Reader, Writer i Closer w ReadCloser, WriteCloser oraz ReadWriteCloser — tworząc przejrzystą strukturę kontraktów.

Złożone interfejsy w interfejsach API

Należy zwracać najszerszy interfejs obsługiwany przez wartość, ale przyjmować najwęższy interfejs używany przez funkcję. Maksymalizuje to zarówno elastyczność, jak i przejrzystość.

Osadzanie interfejsów a osadzanie struktur

  • Osadzanie struktur promuje pola i metody w celu ponownego użycia zachowania
  • Osadzanie interfejsów łączy wymagania dotyczące metod w większy kontrakt

Szybki test

Proszę sprawdzić swoją wiedzę o osadzaniu interfejsów.

Podsumowanie

Poznali Państwo osadzanie interfejsów.

  • Wymienianie interfejsów wewnątrz innych pozwala łączyć zbiory metod
  • Pakiet io łączy elementy Reader/Writer/Closer
  • Należy utrzymywać małe interfejsy bazowe i komponować je w razie potrzeby
  • Funkcja powinna przyjmować najwęższy wymagany interfejs

Często zadawane pytania

Czy lekcja „Osadzanie interfejsów” jest bezpłatna?

Tak — pełny tekst „Osadzanie interfejsów” 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 „Osadzanie interfejsów”?

Komponuj interfejsy Ć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 2 z 4.

Ile czasu zajmuje lekcja „Osadzanie interfejsów”?

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.

Wszystkie lekcje w tym kursie

  1. Osadzanie struktur
  2. Osadzanie interfejsów
  3. Promowanie metod
  4. Kompozycja zamiast dziedziczenia
← Powrót do Go Academy