Funkcje opcji
Konfiguruj za pomocą funkcji
Funkcje opcji 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.
Konfigurowanie za pomocą funkcji
Podstawowy pomysł polega na przedstawieniu każdego opcjonalnego ustawienia jako funkcji, która modyfikuje konfigurację. Są to „funkcje opcji”.
Typ Option
Zdefiniuj Option jako funkcję przyjmującą wskaźnik do struktury konfiguracji.
package main
import "fmt"
type Config struct {
Port int
Timeout int
}
type Option func(*Config)
func main() {
var o Option
fmt.Println(o == nil)
}Tworzenie opcji
Opcja zwraca domknięcie, które ustawia jedno pole. WithPort(9000) tworzy funkcję przypisującą Port = 9000.
package main
import "fmt"
type Config struct{ Port int }
type Option func(*Config)
func WithPort(p int) Option {
return func(c *Config) { c.Port = p }
}
func main() {
c := &Config{}
WithPort(9000)(c)
fmt.Println(c.Port)
}Domknięcia przechwytują wartość
Zwrócona funkcja zamyka nad argumentem. WithPort(9000) zapamiętuje wartość 9000 do czasu późniejszego zastosowania.
Wiele opcji
Każde ustawienie otrzymuje własną funkcję opcji. Wszystkie używają tego samego typu Option.
package main
import "fmt"
type Config struct {
Port int
Timeout int
}
type Option func(*Config)
func WithPort(p int) Option { return func(c *Config) { c.Port = p } }
func WithTimeout(t int) Option { return func(c *Config) { c.Timeout = t } }
func main() {
c := &Config{}
WithPort(80)(c)
WithTimeout(15)(c)
fmt.Printf("%+v\n", *c)
}Opcje z flagami logicznymi
Opcja bez parametrów może przełączać flagę.
package main
import "fmt"
type Config struct{ TLS bool }
type Option func(*Config)
func WithTLS() Option { return func(c *Config) { c.TLS = true } }
func main() {
c := &Config{}
WithTLS()(c)
fmt.Println(c.TLS)
}Stosowanie wycinka opcji
Zbierz opcje w wycinku i zastosuj każdą w pętli — to podstawa konstruktora, który zbudujesz w następnej kolejności.
package main
import "fmt"
type Config struct{ Port, Timeout int }
type Option func(*Config)
func WithPort(p int) Option { return func(c *Config) { c.Port = p } }
func WithTimeout(t int) Option { return func(c *Config) { c.Timeout = t } }
func main() {
c := &Config{}
opts := []Option{WithPort(8080), WithTimeout(30)}
for _, opt := range opts {
opt(c)
}
fmt.Printf("%+v\n", *c)
}Kolejność ma znaczenie
Opcje są stosowane w określonej kolejności. Jeśli dwie opcje ustawiają to samo pole, wygrywa ostatnia — czasami jest to przydatne, a czasami stanowi pułapkę, którą należy opisać w dokumentacji.
Konwencja nazewnicza
Zgodnie z konwencją konstruktory opcji noszą nazwy With... (np. WithPort, WithTLS), dzięki czemu miejsca wywołania przypominają język naturalny.
Opcje mogą zawierać logikę
Opcja jest po prostu funkcją, więc może sprawdzać poprawność, obliczać lub łączyć wartości, a nie tylko je przypisywać.
Dlaczego funkcje są tu lepsze od struktur
- Ustawiasz tylko wymienione pola
- Nazwy w miejscu wywołania same wyjaśniają swoje znaczenie
- Możesz dodawać nowe opcje bez psucia istniejących wywołań
Szybkie sprawdzenie
Sprawdź swoją wiedzę o funkcjach opcji.
Podsumowanie
Nauczyłeś się tworzyć funkcje opcji.
- Zdefiniuj
type Option func(*Config) - Konstruktory
WithXzwracają domknięcia modyfikujące konfigurację - Zastosuj wycinek opcji w pętli
- Kolejność ma znaczenie; wygrywa ostatni zapis
Ucz się Go dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 51
- Lekcje
- 203
Często zadawane pytania
Czy lekcja „Funkcje opcji” jest bezpłatna?
Tak — pełny tekst „Funkcje opcji” 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 „Funkcje opcji”?
Konfiguruj za pomocą funkcji Ć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 „Funkcje opcji”?
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.