0Pricing
Go Academy · Lektion

Eine flexible API erstellen

Das Muster anwenden

Eine flexible API erstellen ist eine kostenlose Go Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Go Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.

Das Pattern anwenden

Setzen Sie nun das vollständige Pattern zusammen: einen Konstruktor, der erforderliche Argumente sowie eine variable Liste von Optionen übernimmt.

Der Konstruktor mit variadischen Parametern

Erforderliche Parameter kommen zuerst; danach folgen die Optionen als ...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)
}

Aufruf ohne Optionen

Da die Optionen variadisch sind, können Aufrufer sie vollständig weglassen und sich auf die Einrichtung durch den Konstruktor verlassen.

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

Aufruf mit mehreren Optionen

Stapeln Sie beliebig viele Optionen; jede ist an der Aufrufstelle klar verständlich.

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

Selbsterklärende Aufrufe

Vergleichen Sie NewServer("localhost", WithPort(9000), WithTLS()) mit einem Positionsaufruf. Die Absicht ist erkennbar, ohne die Signatur nachzuschlagen.

Später Optionen hinzufügen

Benötigen Sie eine neue Einstellung? Fügen Sie eine WithX-Funktion hinzu. Jede bestehende Aufrufstelle wird weiterhin unverändert kompiliert – echte Abwärtskompatibilität.

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

Optionen weitergeben

Da Optionen Werte sind, können Sie an anderer Stelle eine Liste erstellen und sie an den Konstruktor weitergeben.

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

Optionen als öffentliche API

Exportieren Sie den Typ Option und die WithX-Funktionen, damit Bibliotheksnutzer Ihren Typ konfigurieren können, ohne seine Interna zu berühren.

Felder privat halten

Config-Felder können nicht exportiert bleiben; Optionen sind dann die einzige vorgesehene Möglichkeit, sie zu setzen, und schützen so Invarianten.

Wo das Pattern glänzt

  • Bibliothekskonstruktoren mit vielen optionalen Einstellungen
  • APIs, die beim Wachstum stabil bleiben müssen
  • Clients, Server, Logger und Builder

Entsprechungen in der Standardbibliothek

Sie werden diesen Stil im gesamten Go-Ökosystem sehen (gRPC, viele Treiber). Wenn Sie ihn erkennen, wirken diese APIs vertraut.

Kurztest

Testen Sie Ihr Wissen über flexible APIs.

Zusammenfassung

Sie haben mit Functional Options eine flexible API erstellt.

  • Erforderliche Argumente zuerst, danach ...Option
  • Optionen in einer Schleife durchlaufen und jeweils anwenden
  • Aufrufer übergeben null oder beliebig viele Optionen, die klar lesbar sind
  • Später Optionen hinzufügen, ohne Aufrufer zu beschädigen

Häufig gestellte Fragen

Ist die Lektion „Eine flexible API erstellen“ kostenlos?

Ja — der vollständige Text von „Eine flexible API erstellen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Go Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Eine flexible API erstellen“?

Das Muster anwenden Du übst Go Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Go Academy zu starten?

Keine Vorkenntnisse erforderlich. Go Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Eine flexible API erstellen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Go Academy-Lektion Code schreiben und ausführen?

Ja. Jede Go Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Das Problem mit vielen Parametern
  2. Optionsfunktionen
  3. Eine flexible API erstellen
  4. Standardwerte und Validierung
← Zurück zu Go Academy