0Pricing
Go Academy · Lezione

Valori predefiniti e validazione

Impostare valori predefiniti ragionevoli

Valori predefiniti e validazione è una lezione Go Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Go Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Go Academy include 4 lezioni in totale.

Impostare valori predefiniti sensati

Un costruttore robusto parte da buoni valori predefiniti, quindi consente alle opzioni di sovrascriverli. In questo modo evita completamente la trappola del valore zero.

Inizializzare prima di applicare

Costruisca la configurazione con i valori predefiniti prima, quindi applichi le opzioni sopra di essi.

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

I valori predefiniti prevalgono finché non vengono sovrascritti

Una chiamata senza opzioni produce i valori predefiniti; un'opzione sostituisce solo il campo che modifica. Il meglio dei due approcci.

Convalidare dopo l'applicazione

Dopo aver applicato le opzioni, convalidi la configurazione finale e restituisca un errore se non è valida. Faccia restituire al costruttore (*T, error).

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

Convalida all'interno delle opzioni

In alternativa, le opzioni stesse possono restituire un errore. Il tipo Option diventa 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)
}

Quale stile di convalida scegliere

Convalidi nelle opzioni per i controlli relativi a una singola impostazione; convalidi dopo l'applicazione per le regole tra campi, ad esempio TLS richiede il percorso di un certificato. Spesso si usano entrambi gli approcci.

Documentare i valori predefiniti

Documenti sempre ogni valore predefinito nel commento di documentazione del costruttore, così gli utenti sapranno cosa ottengono quando omettono un'opzione.

Obbligatorio e opzionale

Mantenga i valori realmente obbligatori come parametri posizionali; riservi le opzioni a ciò che è veramente opzionale. Non nasconda i dati obbligatori dietro un'opzione.

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

Combinare le opzioni

Può comporre diverse opzioni in un unico preset per le configurazioni comuni.

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

Buone pratiche

  • Parta dai valori predefiniti, quindi applichi le opzioni
  • Convalidi dopo l'applicazione per le regole tra campi
  • Mantenga i valori obbligatori come parametri posizionali
  • Documenti ogni valore predefinito

Un'API completa e robusta

Combinare valori predefiniti, opzioni e convalida consente di ottenere un costruttore flessibile, sicuro, autoesplicativo e facile da estendere.

Verifica rapida

Verifichi la sua conoscenza dei valori predefiniti e della convalida.

Riepilogo

Ha completato il pattern delle opzioni funzionali.

  • Imposti i valori predefiniti prima di applicare le opzioni
  • Convalidi dopo l'applicazione oppure all'interno delle opzioni per i controlli sui singoli campi
  • Mantenga i valori obbligatori come parametri posizionali
  • Componga le opzioni in preset e documenti i valori predefiniti

Domande Frequenti

La lezione «Valori predefiniti e validazione» è gratuita?

Sì — il testo completo di «Valori predefiniti e validazione» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Go Academy, passa a CoddyKit PRO. Il corso Go Academy include 4 lezioni in totale.

Cosa imparerò in «Valori predefiniti e validazione»?

Impostare valori predefiniti ragionevoli Eserciti Go Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Go Academy?

Non è richiesta alcuna esperienza precedente. Go Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Valori predefiniti e validazione»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Go Academy?

Sì. Ogni lezione Go Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Il problema dei molti parametri
  2. Funzioni opzione
  3. Creare un'API flessibile
  4. Valori predefiniti e validazione
← Torna a Go Academy