rust / intermediate
Snippet
Lazy Initialisierung mit OnceLock
OnceLock bietet Thread-sichere lazy Initialisierung für statische Daten. Die Konfiguration wird nur beim ersten Zugriff von der Festplatte gelesen, nicht beim Programmstart. Dies verbessert die Startzeit wenn die Konfiguration nie benötigt wird und stellt sicher, dass teure Operationen nicht wiederholt werden. Anders als lazy_static ist OnceLock seit Rust 1.70 in der Standardbibliothek und hat keinen Macro-Overhead. Die get_or_init Methode garantiert, dass der Closure genau einmal ausgeführt wird, selbst bei gleichzeitigem Zugriff.
snippet.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
use std::sync::OnceLock;use std::fs;static CONFIG: OnceLock<Config> = OnceLock::new();struct Config {app_name: String,max_connections: u32,debug_mode: bool,}fn get_config() -> &'static Config {CONFIG.get_or_init(|| {let contents = fs::read_to_string("config.txt").unwrap_or_default();Config {app_name: contents.lines().next().unwrap_or("Default").to_string(),max_connections: 100,debug_mode: true,}})}fn main() {let config = get_config();println!("App: {}, Connections: {}", config.app_name, config.max_connections);}
Erklärung
1
static CONFIG: OnceLock<Config> = OnceLock::new()
Statisches OnceLock—einmal initialisiert, nie geändert, über alle Threads geteilt
2
CONFIG.get_or_init(|| {...})
Gibt existierenden Wert zurück oder initialisiert atomar beim ersten Aufruf