美文网首页
Rust 全局变量

Rust 全局变量

作者: 黑天鹅学院 | 来源:发表于2021-04-02 18:40 被阅读0次

    在实际项目开发中,难免需要用到全局变量,比如全局配置信息,全局内存池等,此类数据结构可能在多处需要被使用,保存为全局变量可以很方便的进行修改与读取。

    在Rust中,如果只是读取静态变量是比较简单的,比如全局变量是一个usize或者& str等类型的值。如果全局变量是需要初始化产生的就比较复杂了,比如解析一个配置文件,然后把配置文件中的内容赋给全局变量。由于全局变量要被修改,这个全局变量得是可变的,也就是说产生了全局可变变量,而这种方式范围了Rust的设计原则。

    目前一种可行的方式是使用lazy_static库,典型使用方法如下所示。

    struct Config {
        id: u64,
    }
    
    impl Config {
        fn new() -> Config {
            Config {
                id: 0,
            }
        }
    }
    
    lazy_static::lazy_static! {
        static ref CACHE: Mutex<Config> = Mutex::new(Config::new());
    }
    
    fn func1() {
        CACHE.lock().unwrap().id = 1;
    }
    
    fn func2() {
        CACHE.lock().unwrap().id = 2;
    }
    
    fn func3() -> u64 {
        return CACHE.lock().unwrap().id;
    }
    
    fn main() {
      func1();
      let id1 = func3();
      println!("id1 = {}", id1);
    
      func2();
      let id2 = func3();
      println!("id2 = {}", id2);
    }
    

    由于全局变量几乎是不可能完全舍弃的,所以大多数Rust项目里都使用到了lazy_static。

    lazy_static底层基于宏实现,后续将继续展开分析。

    相关文章

      网友评论

          本文标题:Rust 全局变量

          本文链接:https://www.haomeiwen.com/subject/rdyqkltx.html