0Pricing
Go Academy · Lektion

Standardwerte und Validierung

Sinnvolle Standardwerte setzen

Standardwerte und Validierung ist eine kostenlose Go Academy-Lektion auf CoddyKit. Dies ist Lektion 4 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.

Sinnvolle Standardwerte festlegen

Ein robuster Konstruktor beginnt mit guten Standardwerten und lässt anschließend Optionen diese überschreiben. Dadurch wird die Zero-Value-Falle vollständig vermieden.

Vor dem Anwenden initialisieren

Erstellen Sie die Config zuerst mit Standardwerten und wenden Sie anschließend die Optionen darauf an.

package main

import "fmt"

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

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

func NewServer(opts ...Option) *Server {
	s := &Server{Port: 8080, Timeout: 30}
	for _, o := range opts { o(s) }
	return s
}

func main() {
	fmt.Printf("%+v\n", *NewServer())
	fmt.Printf("%+v\n", *NewServer(WithPort(9000)))
}

Standardwerte gelten, bis sie überschrieben werden

Ein Aufruf ohne Optionen liefert die Standardwerte; eine Option ersetzt nur das Feld, das sie verändert. Das Beste aus beiden Welten.

Nach dem Anwenden validieren

Validieren Sie nach dem Anwenden der Optionen die endgültige Config und geben Sie bei einem ungültigen Wert einen Fehler zurück. Lassen Sie den Konstruktor (*T, error) zurückgeben.

package main

import (
	"errors"
	"fmt"
)

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

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

func NewServer(opts ...Option) (*Server, error) {
	s := &Server{Port: 8080}
	for _, o := range opts { o(s) }
	if s.Port < 1 || s.Port > 65535 {
		return nil, errors.New("invalid port")
	}
	return s, nil
}

func main() {
	_, err := NewServer(WithPort(99999))
	fmt.Println(err)
}

Validierung innerhalb von Optionen

Alternativ können die Optionen selbst einen Fehler zurückgeben. Der Typ Option wird zu func(*Config) error.

package main

import (
	"errors"
	"fmt"
)

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

func WithPort(p int) Option {
	return func(s *Server) error {
		if p < 1 {
			return errors.New("port must be positive")
		}
		s.Port = p
		return nil
	}
}

func NewServer(opts ...Option) (*Server, error) {
	s := &Server{Port: 8080}
	for _, o := range opts {
		if err := o(s); err != nil {
			return nil, err
		}
	}
	return s, nil
}

func main() {
	_, err := NewServer(WithPort(-1))
	fmt.Println(err)
}

Welcher Validierungsstil

Validieren Sie in Optionen für Prüfungen einzelner Einstellungen und nach dem Anwenden für Regeln zwischen Feldern (zum Beispiel erfordert TLS einen Zertifikatspfad). Häufig verwenden Sie beides.

Standardwerte dokumentieren

Dokumentieren Sie jeden Standardwert immer im Doc-Kommentar des Konstruktors, damit Nutzer wissen, was sie erhalten, wenn sie eine Option weglassen.

Erforderlich oder optional

Belassen Sie tatsächlich erforderliche Werte als Positionsparameter und verwenden Sie Optionen nur für wirklich optionale Werte. Verbergen Sie erforderliche Daten nicht hinter einer Option.

package main

import "fmt"

type Client struct {
	BaseURL string
	Retries int
}
type Option func(*Client)

func WithRetries(n int) Option { return func(c *Client) { c.Retries = n } }

func NewClient(baseURL string, opts ...Option) *Client {
	c := &Client{BaseURL: baseURL, Retries: 3}
	for _, o := range opts { o(c) }
	return c
}

func main() {
	fmt.Printf("%+v\n", *NewClient("https://api"))
}

Optionen kombinieren

Sie können mehrere Optionen zu einer Voreinstellung für häufig verwendete Konfigurationen kombinieren.

package main

import "fmt"

type Server struct{ Port, Timeout int }
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 Production() Option {
	return func(s *Server) {
		WithPort(443)(s)
		WithTimeout(60)(s)
	}
}

func NewServer(opts ...Option) *Server {
	s := &Server{Port: 8080, Timeout: 30}
	for _, o := range opts { o(s) }
	return s
}

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

Bewährte Vorgehensweisen

  • Mit Standardwerten beginnen und anschließend Optionen anwenden
  • Für Regeln zwischen Feldern nach dem Anwenden validieren
  • Erforderliche Werte als Positionsparameter beibehalten
  • Jeden Standardwert dokumentieren

Eine vollständige, robuste API

Die Kombination aus Standardwerten, Optionen und Validierung liefert einen flexiblen, sicheren, selbsterklärenden und leicht erweiterbaren Konstruktor.

Kurztest

Testen Sie Ihr Wissen über Standardwerte und Validierung.

Zusammenfassung

Sie haben das Functional-Options-Pattern vollständig umgesetzt.

  • Standardwerte vor dem Anwenden der Optionen festlegen
  • Nach dem Anwenden oder innerhalb der Optionen für Prüfungen einzelner Felder validieren
  • Erforderliche Werte als Positionsparameter beibehalten
  • Optionen zu Voreinstellungen kombinieren und Standardwerte dokumentieren

Häufig gestellte Fragen

Ist die Lektion „Standardwerte und Validierung“ kostenlos?

Ja — der vollständige Text von „Standardwerte und Validierung“ 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 „Standardwerte und Validierung“?

Sinnvolle Standardwerte setzen 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 4 von 4.

Wie lange dauert die Lektion „Standardwerte und Validierung“?

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