0Pricing
Go Academy · Lekcja

Budowanie elastycznego API

Zastosuj ten wzorzec

Budowanie elastycznego API 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.

Zastosowanie wzorca

Teraz złożysz cały wzorzec: konstruktor, który przyjmuje wymagane argumenty oraz zmienną liczbę opcji.

Konstruktor o zmiennej liczbie argumentów

Wymagane parametry umieść na początku, a opcje przekaż później jako ...Option.

package main

import "fmt"

type Server struct {
	Host string
	Port int
}
type Option func(*Server)

func WithPort(p int) Option { return func(s *Server) { s.Port = p } }

func NewServer(host string, opts ...Option) *Server {
	s := &Server{Host: host}
	for _, opt := range opts {
		opt(s)
	}
	return s
}

func main() {
	s := NewServer("localhost", WithPort(8080))
	fmt.Printf("%+v\n", *s)
}

Wywołanie bez opcji

Ponieważ opcje mają zmienną liczbę, można całkowicie je pominąć i skorzystać z konfiguracji przygotowanej przez konstruktor.

package main

import "fmt"

type Server struct{ Host string; Port int }
type Option func(*Server)

func NewServer(host string, opts ...Option) *Server {
	s := &Server{Host: host}
	for _, o := range opts { o(s) }
	return s
}

func main() {
	s := NewServer("localhost")
	fmt.Printf("%+v\n", *s)
}

Wywołanie z wieloma opcjami

Możesz podać dowolną liczbę opcji; każda z nich jest czytelna w miejscu wywołania.

package main

import "fmt"

type Server struct {
	Host    string
	Port    int
	Timeout int
	TLS     bool
}
type Option func(*Server)

func WithPort(p int) Option    { return func(s *Server) { s.Port = p } }
func WithTimeout(t int) Option { return func(s *Server) { s.Timeout = t } }
func WithTLS() Option          { return func(s *Server) { s.TLS = true } }

func NewServer(host string, opts ...Option) *Server {
	s := &Server{Host: host}
	for _, o := range opts { o(s) }
	return s
}

func main() {
	s := NewServer("localhost", WithPort(9000), WithTimeout(60), WithTLS())
	fmt.Printf("%+v\n", *s)
}

Samodokumentujące się wywołania

Porównaj NewServer("localhost", WithPort(9000), WithTLS()) z wywołaniem używającym argumentów pozycyjnych. Intencja jest oczywista, bez sprawdzania sygnatury.

Dodawanie opcji w przyszłości

Potrzebujesz nowego ustawienia? Dodaj funkcję WithX. Wszystkie istniejące miejsca wywołania nadal się kompilują bez zmian — to prawdziwa zgodność wsteczna.

package main

import "fmt"

type Server struct{ Host string; Retries int }
type Option func(*Server)

func WithRetries(n int) Option { return func(s *Server) { s.Retries = n } }

func NewServer(host string, opts ...Option) *Server {
	s := &Server{Host: host}
	for _, o := range opts { o(s) }
	return s
}

func main() {
	fmt.Printf("%+v\n", *NewServer("h", WithRetries(5)))
}

Przekazywanie opcji

Ponieważ opcje są wartościami, można utworzyć wycinek w innym miejscu i przekazać go dalej do konstruktora.

package main

import "fmt"

type Server struct{ Host string; Port int }
type Option func(*Server)

func WithPort(p int) Option { return func(s *Server) { s.Port = p } }

func NewServer(host string, opts ...Option) *Server {
	s := &Server{Host: host}
	for _, o := range opts { o(s) }
	return s
}

func main() {
	common := []Option{WithPort(443)}
	s := NewServer("api", common...)
	fmt.Printf("%+v\n", *s)
}

Opcje jako publiczne API

Eksportuj typ Option oraz funkcje WithX, aby użytkownicy biblioteki mogli konfigurować typ bez uzyskiwania dostępu do jego elementów wewnętrznych.

Ukrywanie pól

Pola konfiguracji mogą pozostać nieeksportowane; opcje są jedynym zatwierdzonym sposobem ich ustawiania, co chroni niezmienniki.

Kiedy wzorzec sprawdza się najlepiej

  • Konstruktory bibliotek z wieloma opcjonalnymi ustawieniami
  • API, które musi pozostać stabilne w miarę rozwoju
  • Klienci, serwery, loggery i buildery

Odpowiedniki w bibliotece standardowej

Ten styl można spotkać w całym ekosystemie Go (gRPC i wielu sterownikach). Rozpoznawanie go sprawia, że te interfejsy API stają się znajome.

Szybkie sprawdzenie

Sprawdź swoją wiedzę o elastycznych interfejsach API.

Podsumowanie

Zbudowałeś elastyczne API z użyciem opcji funkcyjnych.

  • Najpierw wymagane argumenty, a następnie ...Option
  • Iterowanie po opcjach i stosowanie każdej z nich
  • Wywołujący mogą przekazać zero lub wiele opcji, a kod pozostaje czytelny
  • Dodawanie opcji w przyszłości bez psucia istniejących wywołań

Często zadawane pytania

Czy lekcja „Budowanie elastycznego API” jest bezpłatna?

Tak — pełny tekst „Budowanie elastycznego API” 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 „Budowanie elastycznego API”?

Zastosuj ten wzorzec Ć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 „Budowanie elastycznego API”?

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. Problem z wieloma parametrami
  2. Funkcje opcji
  3. Budowanie elastycznego API
  4. Wartości domyślne i walidacja
← Powrót do Go Academy