Go Academy · Lezione

Funzioni opzione

Configurare con le funzioni

Lezione 2 di 413 passaggi

Funzioni opzione è una lezione Go Academy gratuita su CoddyKit. Questa è la lezione 2 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.

Configurare con le funzioni

L'idea centrale è rappresentare ogni impostazione opzionale come una funzione che modifica una configurazione. Queste sono le «funzioni opzione».

Il tipo Option

Definisca un'Option come una funzione che accetta un puntatore alla struct di configurazione.

package main

import "fmt"

type Config struct {
	Port    int
	Timeout int
}

type Option func(*Config)

func main() {
	var o Option
	fmt.Println(o == nil)
}

Scrivere un'opzione

Un'opzione restituisce una closure che imposta un campo. WithPort(9000) produce una funzione che assegna Port = 9000.

package main

import "fmt"

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

func WithPort(p int) Option {
	return func(c *Config) { c.Port = p }
}

func main() {
	c := &Config{}
	WithPort(9000)(c)
	fmt.Println(c.Port)
}

Le closure catturano il valore

La funzione restituita cattura l'argomento tramite una closure. WithPort(9000) conserva il valore 9000 fino a quando non viene applicata.

Più opzioni

Ogni impostazione ha la propria funzione opzione. Tutte condividono il tipo Option.

package main

import "fmt"

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

func WithPort(p int) Option    { return func(c *Config) { c.Port = p } }
func WithTimeout(t int) Option { return func(c *Config) { c.Timeout = t } }

func main() {
	c := &Config{}
	WithPort(80)(c)
	WithTimeout(15)(c)
	fmt.Printf("%+v\n", *c)
}

Opzioni per flag booleani

Un'opzione senza parametri può attivare o disattivare un flag.

package main

import "fmt"

type Config struct{ TLS bool }
type Option func(*Config)

func WithTLS() Option { return func(c *Config) { c.TLS = true } }

func main() {
	c := &Config{}
	WithTLS()(c)
	fmt.Println(c.TLS)
}

Applicare uno slice di opzioni

Raccolga le opzioni in uno slice e applichi ciascuna in un ciclo: questo è il cuore del costruttore che costruirà nella prossima lezione.

package main

import "fmt"

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

func WithPort(p int) Option    { return func(c *Config) { c.Port = p } }
func WithTimeout(t int) Option { return func(c *Config) { c.Timeout = t } }

func main() {
	c := &Config{}
	opts := []Option{WithPort(8080), WithTimeout(30)}
	for _, opt := range opts {
		opt(c)
	}
	fmt.Printf("%+v\n", *c)
}

L'ordine è importante

Le opzioni vengono applicate in ordine. Se due opzioni impostano lo stesso campo, prevale l'ultima: a volte è utile, a volte è un'insidia da documentare.

Convenzione di denominazione

Per convenzione, i costruttori delle opzioni si chiamano With..., ad esempio WithPort e WithTLS, così i punti di chiamata si leggono come una frase in inglese.

Le opzioni possono contenere logica

Un'opzione è semplicemente una funzione, quindi può eseguire controlli, calcolare o combinare valori, non solo assegnarli.

Perché qui le funzioni sono migliori delle struct

  • Imposta solo i campi che specifichi
  • Usa nomi autoesplicativi nel punto di chiamata
  • Aggiungi nuove opzioni senza interrompere i chiamanti

Verifica rapida

Verifichi la sua conoscenza delle funzioni opzione.

Riepilogo

Ha imparato a costruire funzioni opzione.

  • Definisca type Option func(*Config)
  • I costruttori WithX restituiscono closure che modificano la configurazione
  • Applichi uno slice di opzioni in un ciclo
  • L'ordine è importante: prevale l'ultima scrittura
Gratis per iniziare

Impara Go con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
51
Lezioni
203

Domande Frequenti

La lezione «Funzioni opzione» è gratuita?

Sì — il testo completo di «Funzioni opzione» è 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 «Funzioni opzione»?

Configurare con le funzioni 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 2 di 4.

Quanto tempo richiede la lezione «Funzioni opzione»?

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