首页 > 其他分享 >Rust全局变量

Rust全局变量

时间:2023-12-20 18:14:03浏览次数:29  
标签:string get unwrap SESSION let 全局变量 Rust String

Rust全局变量

Rust全局变量的一种解决方案,由于mut问题,会导致unsafe代码块。


use std::{collections::HashMap, sync::OnceLock};

/// 全局变量,模拟SESSION管理器
pub static mut SESSION: OnceLock<HashMap<String, String>> = OnceLock::new();

/// 初始化函数
pub fn init() {
    unsafe {
        SESSION.get_or_init(|| HashMap::new());
    }
}

/// 插入kv
pub fn insert(k: String, v: String) {
    unsafe {
        SESSION.get_mut().unwrap().insert(k, v);
    }
}

/// 查找
pub fn get(k: String) -> String {
    let v = unsafe {
        let v: String = SESSION.get().unwrap().get(&k).unwrap().clone();
        v
    };
    v
}


fn main() {
    init();

    let a = std::thread::spawn(|| {
        insert("a".to_string(), "b".to_string());
    });
    
    let b = std::thread::spawn(|| {
        insert("b".to_string(), "c".to_string());
    });

    let c = std::thread::spawn(|| {
        let v = get(&"a".to_string());
        println!("{:?}", v);
    });
    
    a.join().unwrap();
    b.join().unwrap();
    c.join().unwrap();
}

标签:string,get,unwrap,SESSION,let,全局变量,Rust,String
From: https://www.cnblogs.com/linga/p/17917159.html

相关文章

  • rust语言_学习笔记
    rust语言_学习笔记转载注明来源:本文链接来自osnosn的博客,写于2023-12-10.安装rust【安装_rustup_cargo_rustc_交叉编译测试】cargo的config设置更换ustc源,使用代理。设置缺省registry。见【rustcargo配置】。crate库搜索去【crates.io】搜索去【docs.......
  • uniffi-rs rust 多语言bindings 生成工具
    uniffi-rs是基于webidl描述定义,然后生成不同语言bindings的工具,此工具是在学习pyo3的maturin工具看到的,整理记录下参考玩法 目前支持的语言官方支持的包含了Kotlin,Swift,Python,Ruby当然还有不少社区的实现,比如支持C#以及golang说明以上就是一个简单的记录,后边尝试......
  • 35. 干货系列从零用Rust编写负载均衡及代理,代理服务器的源码升级改造
    wmproxywmproxy已用Rust实现http/https代理,socks5代理,反向代理,静态文件服务器,四层TCP/UDP转发,七层负载均衡,内网穿透,后续将实现websocket代理等,会将实现过程分享出来,感兴趣的可以一起造个轮子项目地址国内:https://gitee.com/tickbh/wmproxygithub:https://github.com/......
  • 详解rust 自动化测试、迭代器与闭包、智能指针、无畏并发
    编写测试可以让我们的代码在后续迭代过程中不出现功能性缺陷问题;理解迭代器、闭包的函数式编程特性;Box<T>智能指针在堆上存储数据,Rc<T>智能指针开启多所有权模式等;理解并发,如何安全的使用线程,共享数据。自动化测试编写测试以方便我们在后续的迭代过程中,不会改坏代码。保证了程序的......
  • maturin 方便发布基于rust 的python 包工具
    maturin是PyO3团队开发的,方便我们开发基于rust的python包,比如PyO3的使用文档中就使用了此工具安装&使用安装(可选,可以基于venv安装)可以基于pip以及pipx pipxinstallmaturin创建一个简单项目python-mvenv.venvsource.venv......
  • 编译rustdesk
    虚拟机安装widnowshttps://blog.csdn.net/q2524607033/article/details/131394143rustdesk源码https://github.com/rustdesk/rustdesk/releases/tag/1.2.3安卓编译文档https://rustdesk.com/docs/en/dev/build/android/windows编译文档https://rustdesk.com/docs/en/dev/b......
  • cargo-make rust 任务执行以及构建工具
    再学习nakago框架的时候发现其使用了cargo-make这个工具,但是很方便,类似make的构建模式包含的特性依赖管理,别名支持,支持workspace简单使用安装cargoinstall--forcecargo-make参考使用创建一个cargo项目 cargonewappdemo......
  • 在调试中学习 Rust
    以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「ENG八戒」https://mp.weixin.qq.com/s/EFd0bEZmfxySjmSWrOcS5gRustlings是Rust团队推出的一个开源项目,旨在帮助初学者在调试程序过程中学习Rust语言。上期有篇文章讲到如何配置和升级Rust的工具链《简......
  • 使用Docker自定义配置部署RustDesk Server
    “RustDesk是一款可以平替TeamViewer的开源软件,旨在提供安全便捷的自建方案。”这是RustDesk官网对自己的描述。作为一款使用Rust语言开发的开源软件,在为数不多的Rust开发者和数量庞大的Rust学习者中还是有相当的知名度的,并且商业化的RustDeskPro也是如火如荼。开始docker......
  • 14. 从零用Rust编写正反向代理, HTTP文件服务器的实现过程及参数
    wmproxywmproxy是由Rust编写,已实现http/https代理,socks5代理,反向代理,静态文件服务器,内网穿透,配置热更新等,后续将实现websocket代理等,同时会将实现过程分享出来,感兴趣的可以一起造个轮子法项目++wmproxy++gite:https://gitee.com/tickbh/wmproxygithub:https://github.com/tic......