Funzioni opzione
Configurare con le funzioni
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
WithXrestituiscono closure che modificano la configurazione - Applichi uno slice di opzioni in un ciclo
- L'ordine è importante: prevale l'ultima scrittura
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
- Il problema dei molti parametri
- Funzioni opzione
- Creare un'API flessibile
- Valori predefiniti e validazione