Rust 实现 HashMap 全局变量

Rust 实现 HashMap 全局变量

在一些场景下,不可避免需要使用到全局变量用于保存全局性数据,比如:

  • 本地缓存
  • 本地配置信息
  • 全局计数器

在这些场景中,最为常用的数据类型就是 map了,如何才能实现全局变量呢?

一、static

通过 static 可以实现全局变量的效果

static MAP: HashMap<u32, String> = HashMap::new();

直接结果:

   |
21 | static mut MAP:HashMap<String,String> = HashMap::new();
   |                                         ^^^^^^^^^^^^^^

For more information about this error, try `rustc --explain E0015`.

E0015 错误提示: 只有 const 类型函数能被静态或常量表达式调用。

我们无法通过 static 的方式生命 HashMap 的全局变量。因此我们引入 lazy_static 来帮助我们实现 HashMap 的全局静态变量。

二、lazy_static
lazy-static 可以简化我们使用全局变量的过程,同时可以实现 HashMap 的全局变量使用。

Cargo.toml 文件

[dependencies]
lazy_static = "1.4.0"

引用 lazy_static 库

#[macro_use]
extern crate lazy_static;

实现 HashMap 初始化,mut 表示该全局变量可以进行修改

lazy_static! {
 static  ref DATA_MAP: Mutex<HashMap<String, String>> = {
        let mut map:HashMap<String, String> = HashMap::new();
         map.insert("1".to_string(),"one".to_string());
         map.insert("2".to_string(),"two".to_string());
         map.insert("3".to_string(),"three".to_string());
         Mutex::new(map)
        };
}

main() 方法在 DATA_MAP 插入一条数据,并打印

fn main() {
    DATA_MAP.lock().unwrap().insert("4".to_string(),"four".to_string());
    println!("{:?}",DATA_MAP.lock().unwrap());
}

打印结果

{"1": "one", "3": "three", "2": "two", "4": "four"}

三、参考文章:

1.《Rust Crate 使用:lazy_static》

你可能感兴趣的:(rust,rust,开发语言)