Go Academy · Les

Standaardwaarden en validatie

Stel zinvolle standaardwaarden in

Les 4 van 413 stappen

Standaardwaarden en validatie is een gratis Go Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Go Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Go Academy bevat in totaal 4 lessen.

Verstandige standaardwaarden instellen

Een robuuste constructor begint met goede standaardwaarden en laat opties die overschrijven. Zo vermijd je de valkuil van de nulwaarde volledig.

Initialiseren vóór toepassen

Stel de configuratie eerst samen met standaardwaarden en pas daarna de opties toe.

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

Standaardwaarden blijven gelden tot ze worden overschreven

Een aanroep zonder opties levert de standaardwaarden op; een optie vervangt alleen het veld dat ze aanraakt. Het beste van beide werelden.

Valideren na toepassen

Valideer na het toepassen van de opties de uiteindelijke configuratie en retourneer een fout als die ongeldig is. Laat de constructor (*T, error) retourneren.

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

Validatie in opties

Je kunt opties ook zelf een fout laten retourneren. Het type Option wordt dan 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)
}

Welke validatiestijl

Valideer in opties voor controles per instelling; valideer na het toepassen voor regels die meerdere velden betreffen (bijvoorbeeld: TLS vereist een certificaatpad). Vaak gebruik je beide.

Standaardwaarden documenteren

Documenteer altijd elke standaardwaarde in de documentatieopmerking van de constructor, zodat gebruikers weten wat ze krijgen als ze een optie weglaten.

Verplicht versus optioneel

Houd echt verplichte waarden als positionele parameters; gebruik opties alleen voor wat werkelijk optioneel is. Verberg verplichte gegevens niet achter een optie.

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

Opties combineren

Je kunt meerdere opties samenstellen tot één voorinstelling voor veelgebruikte configuraties.

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

Beste werkwijzen

  • Begin met standaardwaarden en pas daarna opties toe
  • Valideer na het toepassen voor regels die meerdere velden betreffen
  • Houd verplichte waarden positioneel
  • Documenteer elke standaardwaarde

Een complete, robuuste API

Door standaardwaarden, opties en validatie te combineren, krijg je een constructor die flexibel, veilig, zelfbeschrijvend en eenvoudig uit te breiden is.

Korte toets

Toets je kennis van standaardwaarden en validatie.

Samenvatting

Je hebt het patroon van functionele opties voltooid.

  • Stel standaardwaarden in voordat je opties toepast
  • Valideer na het toepassen, of in opties voor controles per veld
  • Houd verplichte waarden positioneel
  • Combineer opties tot voorinstellingen en documenteer standaardwaarden
Gratis beginnen

Leer Go met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
51
Lessen
203

Veelgestelde vragen

Is de les “Standaardwaarden en validatie” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Go Academy, waaronder “Standaardwaarden en validatie”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Go Academy bevat in totaal 4 lessen.

Wat leer ik in “Standaardwaarden en validatie”?

Stel zinvolle standaardwaarden in Je oefent met Go Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Go Academy te beginnen?

Ervaring vooraf is niet nodig. Go Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.

Hoe lang duurt de les “Standaardwaarden en validatie”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Go Academy?

Ja. Elke les over Go Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Het probleem met veel parameters
  2. Option-functies
  3. Een flexibele API bouwen
  4. Standaardwaarden en validatie
← Terug naar Go Academy