go / expert
Snippet
Lock-freies Konfigurations-Update mit atomic.Value
atomic.Value bietet eine effiziente Möglichkeit, Werte beliebiger Typen atomar zu laden und zu speichern. Dies ist besonders nützlich für Konfigurationsobjekte, die von vielen Goroutinen häufig gelesen, aber selten aktualisiert werden. Es vermeidet den Overhead eines RWMutex bei jeder Leseoperation und verlässt sich stattdessen auf hardwarenahe atomare CPU-Instruktionen.
snippet.go
1
2
3
4
5
6
7
8
9
10
type Config struct { Enabled bool; Timeout time.Duration }var globalConfig atomic.Valuefunc updateConfig(c *Config) {globalConfig.Store(c)}func getConfig() *Config {return globalConfig.Load().(*Config)}
Erklärung
1
globalConfig.Store(c)
Ersetzt die aktuelle Konfiguration atomar durch einen neuen Pointer.
2
globalConfig.Load().(*Config)
Ruft den Pointer atomar ab und führt eine Typzusicherung durch.