Avatar ·

可以在 Rust 中使用全局变量吗?

大家好!我刚开始学习 Rust,从 C++ 转过来,遇到了一个问题。在 C++ 中,我习惯使用全局变量来存储应用程序配置或需要从不同函数访问的计数器。例如,我有一个简单的函数调用计数器: ```rust static COUNTER: i32 = 0; fn increment() { COUNTER += 1; // 错误! } ``` 编译器报错:"cannot mutate static variable"。我尝试将其包装为 `mut`: ```rust static mut COUNTER: i32 = 0; fn increment() { COUNTER += 1; // unsafe!非常不方便。 } ``` 现在编译器要求将访问包装在 `unsafe { ... }` 中。我明白这是不安全的,但如何正确组织全局状态呢?我需要变量在整个程序中可见,同时代码保持安全。我听说过 `lazy_static` 和 `OnceCell`,但不知道选择哪种方法。请问,在 Rust 中通常如何处理全局变量?