Go Academy · Lektion

Bygga ett flexibelt API

Tillämpa mönstret

Lektion 3 av 413 steg

Bygga ett flexibelt API är en gratis lektion i Go Academy på CoddyKit. Detta är lektion 3 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Go Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Go Academy innehåller totalt 4 lektioner.

Tillämpa mönstret

Nu sätter ni ihop hela mönstret: en konstruktor som tar obligatoriska argument samt en variadisk lista med options.

Den variadiska konstruktorn

Obligatoriska parametrar kommer först; därefter följer options som ...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)
}

Anropa utan options

Eftersom options är variadiska kan anropare utelämna dem helt och förlita sig på det som konstruktorn konfigurerar.

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)
}

Anropa med flera options

Stapla så många options ni vill; var och en är tydlig på anropsstället.

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)
}

Självdokumenterande anrop

Jämför NewServer("localhost", WithPort(9000), WithTLS()) med ett positionsbaserat anrop. Avsikten är uppenbar utan att ni behöver kontrollera signaturen.

Lägga till options senare

Behöver ni en ny inställning? Lägg till en WithX-funktion. Alla befintliga anropsställen fortsätter att kompileras utan ändringar — verklig bakåtkompatibilitet.

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)))
}

Skicka runt options

Eftersom options är värden kan ni bygga en slice någon annanstans och vidarebefordra den till konstruktorn.

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)
}

Options som offentligt API

Exportera typen Option och funktionerna WithX, så att biblioteksanvändare kan konfigurera er typ utan att behöva röra dess interna delar.

Hålla fält privata

Config-fälten kan förbli oexporterade; options är det enda godkända sättet att sätta dem, vilket skyddar invarianta villkor.

När mönstret passar särskilt bra

  • Bibliotekskonstruktorer med många valfria inställningar
  • API:er som måste förbli stabila när de växer
  • Klienter, servrar, loggare och builders

Motsvarigheter i standardbiblioteket

Ni kommer att se den här stilen i hela Go-ekosystemet (gRPC och många drivrutiner). När ni känner igen mönstret känns dessa API:er bekanta.

Snabbtest

Testa era kunskaper om flexibla API:er.

Sammanfattning

Ni har byggt ett flexibelt API med funktionella options.

  • Obligatoriska argument först, sedan ...Option
  • Iterera över options och tillämpa var och en
  • Anropare kan skicka noll eller många options, med tydliga anrop
  • Lägg till options senare utan att påverka anropare
Gratis att börja

Lär dig Go med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
51
Lektioner
203

Vanliga frågor

Är lektionen ”Bygga ett flexibelt API” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Go Academy, inklusive ”Bygga ett flexibelt API”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Go Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Bygga ett flexibelt API”?

Tillämpa mönstret Ni övar på Go Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Go Academy?

Du behöver inga förkunskaper. Utbildningen i Go Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.

Hur lång tid tar lektionen ”Bygga ett flexibelt API”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Go Academy-lektionen?

Ja. Varje Go Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Problemet med många parametrar
  2. Optionsfunktioner
  3. Bygga ett flexibelt API
  4. Standardvärden och validering
← Tillbaka till Go Academy