- 代码示例:
- 首先,在
Cargo.toml
文件中添加 lazy_static
依赖:
[dependencies]
lazy_static = "1.4.0"
- 然后,在 Rust 代码中定义全局只读配置结构体:
use lazy_static::lazy_static;
// 定义配置结构体
struct Config {
setting1: String,
setting2: i32,
}
lazy_static! {
static ref CONFIG: Config = Config {
setting1: "value1".to_string(),
setting2: 42,
};
}
fn main() {
println!("Setting 1: {}", CONFIG.setting1);
println!("Setting 2: {}", CONFIG.setting2);
}
- 为什么使用
lazy_static
而不是普通的静态变量定义:
- 普通静态变量:普通的静态变量在程序启动时就会被初始化,无论是否使用到该变量。如果初始化过程复杂,可能会导致程序启动变慢。例如,如果静态变量的初始化需要读取文件、连接数据库等操作,这在程序启动时就会执行,即使在程序运行过程中可能根本不会用到该变量。
lazy_static
:lazy_static
实现了惰性求值,即变量只有在第一次被使用时才会被初始化。这对于复杂或资源消耗大的初始化操作非常有用,可以延迟这些操作直到真正需要时才执行,从而提高程序的启动性能。同时,lazy_static
内部处理了线程安全问题,对于多线程环境下的全局变量访问,无需开发者额外处理同步机制,保证了全局变量在多线程环境下的安全使用。