0Pricing
Go Academy · Lezione

Creare un'API flessibile

Applicare il pattern

Creare un'API flessibile è una lezione Go Academy gratuita su CoddyKit. Questa è la lezione 3 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.

Applicare il pattern

Ora assembli il pattern completo: un costruttore che accetta gli argomenti obbligatori più un elenco variadico di opzioni.

Il costruttore variadico

I parametri obbligatori vengono prima; le opzioni seguono come ...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)
}

Chiamare senza opzioni

Poiché le opzioni sono variadiche, i chiamanti possono ometterle completamente e affidarsi a ciò che il costruttore configura.

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

Chiamare con più opzioni

Passi tutte le opzioni desiderate; ciascuna è facilmente comprensibile nel punto di chiamata.

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

Chiamate autoesplicative

Confronti NewServer("localhost", WithPort(9000), WithTLS()) con una chiamata posizionale. L'intento è evidente senza controllare la firma.

Aggiungere opzioni in seguito

Ha bisogno di una nuova impostazione? Aggiunga una funzione WithX. Ogni punto di chiamata esistente continuerà a essere compilato senza modifiche: vera compatibilità con le versioni precedenti.

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

Passare le opzioni

Poiché le opzioni sono valori, può costruire uno slice altrove e passarlo al costruttore.

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

Le opzioni come API pubblica

Esporti il tipo Option e le funzioni WithX, così gli utenti della libreria possono configurare il suo tipo senza toccarne gli elementi interni.

Mantenere privati i campi

I campi della configurazione possono rimanere non esportati; le opzioni sono l'unico modo autorizzato per impostarli e proteggono gli invarianti.

Dove il pattern dà il meglio

  • Costruttori di librerie con molte impostazioni opzionali
  • API che devono rimanere stabili mentre crescono
  • Client, server, logger e builder

Echi nella libreria standard

Vedrà questo stile in tutto l'ecosistema Go, ad esempio in gRPC e in molti driver. Riconoscerlo rende familiari queste API.

Verifica rapida

Verifichi la sua conoscenza delle API flessibili.

Riepilogo

Ha costruito un'API flessibile con le opzioni funzionali.

  • Prima gli argomenti obbligatori, poi ...Option
  • Iteri sulle opzioni applicandole una alla volta
  • I chiamanti ne passano zero o molte, in modo chiaro
  • Aggiunga opzioni in seguito senza interrompere i chiamanti

Domande Frequenti

La lezione «Creare un'API flessibile» è gratuita?

Sì — il testo completo di «Creare un'API flessibile» è 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 «Creare un'API flessibile»?

Applicare il pattern 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 3 di 4.

Quanto tempo richiede la lezione «Creare un'API flessibile»?

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