Go Academy · Lekcja

Funkcje opcji

Konfiguruj za pomocą funkcji

Lekcja 2 z 413 kroki

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 WithX zwracają domknięcia modyfikujące konfigurację
  • Zastosuj wycinek opcji w pętli
  • Kolejność ma znaczenie; wygrywa ostatni zapis
Bezpłatny start

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.

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