LazyLock (nightly) or OnceLock for thread-safe lazy init.
Using OnceLock:
1use std::sync::OnceLock;23static CONFIG: OnceLock<Config> = OnceLock::new();45fn get_config() -> &'static Config {6 CONFIG.get_or_init(|| Config {7 db_url: std::env::var("DATABASE_URL").unwrap(),8 max_connections: 10,9 })10}
Using once_cell crate (stable):
1use once_cell::sync::Lazy;23static CONFIG: Lazy<Config> = Lazy::new(|| {4 Config {5 db_url: std::env::var("DATABASE_URL").unwrap(),6 }7});
Key: OnceLock for std, once_cell for stable lazy init.