Go Academy · Lezione

Valori predefiniti e monitoraggio

Impostare valori predefiniti e hot reload

Lezione 3 di 413 passaggi

Valori predefiniti e monitoraggio è 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.

Valori predefiniti sensati

Un buon sistema di configurazione funziona anche quando non è stato impostato nulla. I valori predefiniti forniscono un valore alternativo per ogni chiave, così il programma non si arresta mai in modo anomalo a causa di un valore mancante.

Viper offre SetDefault per questo scopo, e lo colloca all'ultimo posto nella catena di precedenza.

Impostare i valori predefiniti

Registri i valori predefiniti prima di leggere il file. Qualsiasi origine, come file, ambiente o flag, li sovrascrive.

viper.SetDefault("port", 8080)
viper.SetDefault("logLevel", "info")
fmt.Println(viper.GetInt("port"))

Perché i valori predefiniti sono utili

I valori predefiniti riducono le dimensioni dei file di configurazione: il team operativo deve sovrascrivere solo ciò che differisce dalla norma. Inoltre documentano direttamente nel codice la struttura prevista della configurazione.

Ricaricamento a caldo con WatchConfig

A volte è utile applicare le modifiche alla configurazione senza riavviare il programma. viper.WatchConfig() osserva le modifiche al file usando fsnotify.

viper.WatchConfig()

Reagire alle modifiche

Registri un callback da eseguire quando il file cambia:

viper.OnConfigChange(func(e fsnotify.Event) {
    fmt.Println("config changed:", e.Name)
})
viper.WatchConfig()

Quando è utile il ricaricamento a caldo

Il ricaricamento a caldo è particolarmente utile per valori che possono essere modificati in sicurezza durante l'esecuzione:

  • Livello di verbosità dei log
  • Feature flag
  • Limiti di frequenza

Eviti il ricaricamento a caldo di elementi come la porta di ascolto o il DSN del database, che in genere richiedono un riavvio.

Sicurezza dei thread

Quando la configurazione può cambiare durante l'esecuzione, più goroutine possono leggerla. I getter di Viper sono sicuri per l'accesso concorrente, ma se memorizza i valori nelle proprie variabili, le protegga con un mutex o con un valore atomico.

var cfg atomic.Value // stores a Config struct
cfg.Store(loadConfig())

Rappresentare i valori predefiniti senza Viper

È possibile esprimere la stessa idea dei valori predefiniti usando semplice Go: una funzione che restituisce il valore se presente oppure un valore alternativo.

func intOr(m map[string]int, key string, def int) int {
    if v, ok := m[key]; ok {
        return v
    }
    return def
}

Convalida dopo il ricaricamento

Convalidi sempre la configurazione dopo un ricaricamento e prima di applicarla. Un errore di battitura nel file dovrebbe mantenere la vecchia configurazione valida, non arrestare il servizio in esecuzione. Registri l'errore nel log e continui a fornire il servizio.

newCfg, err := load()
if err != nil {
    log.Println("bad config, keeping current:", err)
    return
}
current.Store(newCfg)

Simulare un ricaricamento

Concettualmente, un ricaricamento rilegge l'origine e sostituisce la configurazione attiva. Il watcher attiva questa sostituzione quando cambia l'ora di modifica del file. La prossima demo eseguibile mostra la modifica del valore.

Eseguibile: valori predefiniti e ricaricamento

Questo programma autonomo mostra la logica dei valori predefiniti, seguita da un ricaricamento simulato che modifica un valore.

package main

import "fmt"

func get(m map[string]int, k string, def int) int {
    if v, ok := m[k]; ok {
        return v
    }
    return def
}

func main() {
    cfg := map[string]int{}
    fmt.Println("port (default):", get(cfg, "port", 8080))
    cfg["port"] = 9090 // simulated reload
    fmt.Println("port (reloaded):", get(cfg, "port", 8080))
}

Verifica rapida

Verifichi la propria comprensione dei valori predefiniti e del monitoraggio delle modifiche.

Riepilogo

Ha imparato a usare i valori predefiniti e il ricaricamento a caldo:

  • SetDefault fornisce valori alternativi con la precedenza più bassa
  • WatchConfig e OnConfigChange abilitano il ricaricamento in tempo reale
  • Applichi il ricaricamento a caldo solo ai valori che possono essere modificati in sicurezza durante l'esecuzione
  • Protegga la configurazione memorizzata nella cache con operazioni atomiche o mutex e la convalidi prima di applicarla
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 «Valori predefiniti e monitoraggio» è gratuita?

Sì — il testo completo di «Valori predefiniti e monitoraggio» è 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 monitoraggio»?

Impostare valori predefiniti e hot reload 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 «Valori predefiniti e monitoraggio»?

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. Leggere file di configurazione
  2. Variabili d'ambiente
  3. Valori predefiniti e monitoraggio
  4. Associare agli struct
← Torna a Go Academy