可以在Rust中使用全局变量吗?如何声明全局状态?
你好!我写Rust已经几周了,遇到了一个问题。我需要存储应用程序配置和一个请求计数器,这些要从不同模块访问。在C++中,我会这样做:
```rust
// 我的尝试(无法编译)
static COUNTER: i32 = 0;
static CONFIG: HashMap = HashMap::new();
fn increment() {
COUNTER += 1; // 错误:无法赋值给不可变的static
}
fn main() {
CONFIG.insert("host".to_string(), "localhost".to_string()); // 错误
println!("{}", COUNTER);
}
```
编译器报错关于可变性,并且对于`HashMap`说了一些关于`const fn`和分配的问题。我读到在Rust中全局变量很复杂,但如何做共享设置呢?我需要:
1. 一个简单的计数器,可以从不同线程递增。
2. 配置(HashMap),在启动时填充,之后只读取。
3. 一个记录到文件的logger,需要初始化一次。
尝试过`lazy_static!`——没有完全理解。帮帮我。