Rust中三种方式使用环境变量
环境变量是存储在操作系统中的一组键值对。它们用于存储系统和其他应用程序所需的配置信息。本文我们将探索如何在Rust中使用标准库以及dotenv crate来处理环境变量。
环境变量
环境变量提供了一种灵活的方式来配置应用程序,而无需直接在源代码中硬编码配置值。这可以为不同的环境(开发、测试和生产)管理不同的配置,或让敏感信息(如API密钥)的安全变得更加容易。
让我们看3个不同的例子来说明如何在Rust中使用环境变量。
- 使用std::env模块
- 使用命令行(Windows和Linux)
- 使用dotenv crate
使用std::env模块
Rust提供了std::env模块来与环境变量交互。该模块可以读取、设置和删除环境变量。
首先,从标准库中导入env模块:
use std::env;
fn main(){let key: &str = "AAA";std::env::set_var(key, "123");match env::var(key){OK(val:String) => println!("():{:?}", key, val),Err(e: VarError) => println!("Error{}:{}", key, e),}
}
在终端中输入cargo run来测试程序,输出应该是这样的:
AAA:"123"
- 设置删除变量
可以使用set_var函数设置环境变量,删除环境变量使用remove_var函数。下面是示例,我们将变量AAA设置为值123:
fn main() {let key = "AAA";std::env::set_var(key, "123"); // Sets AAA to 123
}fn main() {let key = "AAA";env::remove_var(key); // Removes the variable AAA
}
- 检测变量存在
要检查环境变量是否存在,请使用env::var函数,该函数返回Result。你可以用match语句来处理:
fn main() {let key = "AAA";match env::var(key) {Ok(val) => println!("{}: {:?}", key, val),Err(e) => println!("Error {}: {}", key, e),}
}
使用命令行环境变量
你可以在运行Rust程序时直接从命令行传递环境变量。下面是如何读取CLI_ARG环境变量:
fn main() {let cli_arg = env::var("CLI_ARG");match cli_arg {Ok(val) => println!("CLI_ARG: {:?}", val),Err(e) => println!("Error CLI_ARG: {}", e),}
}
要从命令行读取它们,可以使用以下命令:
在Linux / macOS:
CLI_ARG=TEST cargo run
在Windows(powershell):
$env:CLI_ARG="TEST"; cargo run
使用dotenv Crate
除了标准库之外,您还可以使用dotenv crate从.env文件加载环境变量。这在开发环境中特别有用。首先将dotenv添加到Cargo.toml文件:
[dependencies]
dotenv = "0.15.0"
然后在项目根目录下创建.env文件:
API_KEY=1234567890
- 从.env文件加载环境变量:
use dotenv::dotenv;
use std::env;fn main() {dotenv().ok(); // Reads the .env filelet api_key = env::var("API_KEY");match api_key {Ok(val) => println!("API_KEY: {:?}", val),Err(e) => println!("Error API_KEY: {}", e),}//Simulate the execution of the rest of the programprintln!("...program continues...");
}
在上面的例子中,dotenv().ok();行代码从项目根目录中的.env文件加载变量。然后,程序尝试读取API_KEY变量并打印其值,如果未设置则打印错误。
最后总结
这只是在Rust中使用环境变量的三个基本示例。希望让对你学习rust有点帮助,一起rust!
相关文章:
Rust中三种方式使用环境变量
环境变量是存储在操作系统中的一组键值对。它们用于存储系统和其他应用程序所需的配置信息。本文我们将探索如何在Rust中使用标准库以及dotenv crate来处理环境变量。 环境变量 环境变量提供了一种灵活的方式来配置应用程序,而无需直接在源代码中硬编码配置值。这…...
搭建支持国密GmSSL的Nginx环境
准备 1、服务器准备:本文搭建使用的服务器是CentOS 7.6 2、安装包准备:需要GmSSL、国密Nginx,可通过互联网下载或者从 https://download.csdn.net/download/m0_46665077/89936158 下载国密GmSSL安装包和国密Nginx安装包。 服务器安装依赖包…...
Docker部署Portainer CE结合内网穿透实现容器的可视化管理与远程访问
文章目录 前言1. 本地安装Docker2. 本地部署Portainer CE3. 公网远程访问本地Portainer-CE3.1 内网穿透工具安装3.2 创建远程连接公网地址4. 固定Portainer CE公网地址前言 本篇文章介绍如何在Ubuntu中使用docker本地部署Portainer CE可视化管理工具,并结合cpolar实现公网远程…...
不适合的学习方法
文章目录 不适合的学习方法1. 纯粹死记硬背2. 过度依赖单一资料3. 线性学习4. 被动学习5. 一次性学习6. 忽视实践7. 缺乏目标导向8. 过度依赖技术9. 忽视个人学习风格10. 过于频繁的切换 结论 以下是关于不适合的学习方法的更详细描述,包括额外的内容和相关公式&…...
在子类中调用父类的构造函数
在Java中调用父类构造函数 使用super()关键字:在子类的构造函数中,可以使用super()来调用父类的构造函数。如果父类有默认构造函数(即没有参数的构造函数),并且子类的构造函数没有显式调用super(),Java编译…...
【K8S系列】Kubernetes 中 Service 的流量不均匀问题【已解决】
在 Kubernetes 中,Service 是一种抽象,用于定义一组 Pod 的访问策略。当某些 Pod 接收的流量过多,而其他 Pod 的流量较少时,可能会导致负载不均衡。这种情况不仅影响性能,还可能导致某些 Pod 过载,影响应用…...
C-小H学生物
题意:一棵树节点编号为1具有n种不同物种的演化树上。物种i将遗传信息向下传递到物种j会产生dij的遍历。dij是一个长为l的01串。变异程度duv为u到v简单路径上的所有编译信息的异或和。基因多样性定义为 分析:计算Di的遗传信息,用dfs将遗传信息…...
什么是软件设计模式, 它们⽤于解决什么问题, 它们为什么有效
什么是设计模式 软件设计模式是指在软件设计过程中,经过验证的、可复⽤的、对特定 场景下常⻅问题的解决⽅案的⼀种描述或模板。这些模式并不是具体的 代码,⽽是⽤于指导如何组织代码、类和对象,以便更好地解决问题和 满⾜需求。 ⽤于解决的…...
LeetCode 3165.不包含相邻元素的子序列的最大和:单点修改的线段树(动态规划)
【LetMeFly】3165.不包含相邻元素的子序列的最大和:单点修改的线段树(动态规划) 力扣题目链接:https://leetcode.cn/problems/maximum-sum-of-subsequence-with-non-adjacent-elements/ 给你一个整数数组 nums 和一个二维数组 q…...
ios 快捷指令扩展(Intents Extension)简单使用 swift语言
本文介绍使用Xcode15 建立快捷指令的Extension,并描述如何修改快捷指令的IntentHandler,带参数跳转主应用;以及展示多个选项的快捷指令弹框(配置intentdefinition文件),点击选项带参数跳到主应用的方法 创建快捷指令 快捷指令是…...
虚拟化环境中的精简版 Android 操作系统 Microdroid
随着移动设备的普及和应用场景的多样化,安全性和隐私保护成为了移动操作系统的重要课题。Google推出的Microdroid,是一个专为虚拟化环境设计的精简版Android操作系统,旨在提供一个安全、隔离的执行环境。本文将详细介绍Microdroid的架构、功能…...
NFTScan Site:以蓝标认证与高级项目管理功能赋能 NFT 项目
自 NFTScan Site 上线以来,它迅速成为 NFT 市场中的一支重要力量,凭借对各类 NFT 集合、市场以及 NFTfi 项目的认证获得了广泛认可。这个平台帮助许多项目提升了曝光度和可见性,为它们在竞争激烈的 NFT 市场中创造了更大的成功机会。 在最新更…...
Vue:模板 MVVM
Vue:模板 & MVVM 模板插值语法指令语法 MVVMdefineProperty数据代理 模板 Vue实例绑定一个容器,想要向容器中填入动态的值,就需要使用模板语法。模板语法分为插值语法和指令语法。 插值语法 插值语法很简单,使用{{}}包含一…...
Kafka 消息丢失如何处理?
今天给大家分享一个在面试中经常遇到的问题:Kafka 消息丢失该如何处理? 这个问题啊,看似简单,其实里面藏着很多“套路”。 来,咱们先讲一个面试的“真实”案例。 面试官问:“Kafka 消息丢失如何处理&#x…...
Mysql报错注入之floor报错详解
updatexml extractvalue floor 是mysql的函数 groupbyrandfloorcount 一、简述 利用 select count(),(floor(rand(0)2))x from table group by x,导致数据库报错,通过 concat 函数,连接注入语句与 floor(rand(0)*2)函数,实现将…...
EPS原理笔记
EPS UE(user equipment),移动用户设备 LTE(Long Term Evolution),无线接入网部分,E-UTRAN EPC(system Architecture Evolution、Evoloed Packet Core),核心网部分,主要包括MME、S-GW、P-GW、HSS,连接Intern…...
LeetCode 876. 链表的中间结点
题目描述: 给你单链表的头结点 head ,请你找出并返回链表的中间结点。 如果有两个中间结点,则返回第二个中间结点。 示例 1: 输入:head [1,2,3,4,5] 输出:[3,4,5] 解释:链表只有一个中间结点࿰…...
划界与分类的艺术:支持向量机(SVM)的深度解析
划界与分类的艺术:支持向量机(SVM)的深度解析 1. 引言 支持向量机(Support Vector Machine, SVM)是机器学习中的经典算法,以其强大的分类和回归能力在众多领域得到了广泛应用。SVM通过找到最优超平面来分…...
题目:100条经典C语言笔试题目(1-5)
题目: 1、请填写 bool , float, 指针变量 与“零值”比较的if 语句。 提示:这里“零值”可以是 0, 0.0 , FALSE 或者“空指针” 。例如 int 变量 n 与“零值”比较的 if 语句为: (1)请写出bool flag 与“零值”比较…...
python代码编写规范及注意事项
目录 1. 注意1.1 变量与常量解释:建议的修复: 1.2 Too many arguments 和 Too many local variables解决方案1. 减少参数数量2. 减少局部变量数量3. 调整 Pylint 配置 总结 1. 注意 1.1 变量与常量 解读下面的pylint问题 C0103: Constant name “file_p…...
2025 年勒索软件隐匿化攻击演进与行为基线防御研究
摘要 据 Talos 2025 年度网络安全回顾报告显示,勒索软件攻击已从暴力突破转向合法访问隐匿渗透,攻击者依托钓鱼、有效账号与系统自带管理工具实现无感知横向移动,传统边界防护显著失效。2025 年数据表明,约 40% 初始访问源于网络钓…...
Vibe Coding氛围编程系列:AI 模型 服务选择之哪个模型编程能力最强?
前言 2026年,AI辅助编程早已告别了“单行代码补全”的初级阶段,正式进入了Vibe Coding(氛围编程) 的全新时代。所谓氛围编程,核心是AI能完全贴合开发者的编码思路、节奏与工作流,实现无断点、沉浸式的流畅…...
拯救受损二维码:用QRazyBox实现高效恢复的4个实战策略
拯救受损二维码:用QRazyBox实现高效恢复的4个实战策略 【免费下载链接】qrazybox QR Code Analysis and Recovery Toolkit 项目地址: https://gitcode.com/gh_mirrors/qr/qrazybox QRazyBox是一款专业的二维码分析与恢复工具包(QR Code Analysis …...
IP离线库每周更新一次够用吗?企业风控建议多久更新?
在风控体系中,IP数据的时效性直接决定了拦截效果。当攻击者使用秒拨IP或住宅代理发起攻击时,IP地址的轮换速度可以达到分钟级。如果依赖的IP库更新周期过长,就等于在防御上留下了数天的空窗期。 周更不够用。秒拨IP平均存活3-5分钟ÿ…...
Python Decouple 的测试策略:如何确保配置的正确性
Python Decouple 的测试策略:如何确保配置的正确性 【免费下载链接】python-decouple Strict separation of config from code. 项目地址: https://gitcode.com/gh_mirrors/py/python-decouple 在软件开发中,配置管理的正确性直接影响应用的稳定性…...
一款实用汉化工具快速安装使用指南 -- cheat-engine中文版安装教程入口
文章目录安装方式安装后在哪里找到?(重点补全)使用说明温馨提示首先呢,大家可能在用 cheat engine (CE修改器)的时候呢,可能总是使用的是英文版,用的不太舒服啊,这个时候呢ÿ…...
如何在 Linux 系统中查看和管理网络接口?
一、 查看网络接口使用 ifconfig 命令 查看活动接口:直接输入 ifconfig 可显示当前系统所有已激活的网络接口信息。查看所有接口:使用 ifconfig -a 可显示当前系统所有的网络接口(包括未激活的)。使用 ip 命令 查看 IP 地址&#…...
告别编译报错!Ubuntu 22.04 LTS下x264库的保姆级安装指南(含configure参数详解)
告别编译报错!Ubuntu 22.04 LTS下x264库的保姆级安装指南(含configure参数详解) 在视频处理领域,x264作为开源的H.264编码器实现,因其出色的压缩效率和画质表现,成为FFmpeg等多媒体工具链的核心组件。然而对…...
告别重复训练!用InverseSR和潜在扩散模型搞定不同医院的三维脑MRI超分难题
医学影像超分辨率革命:InverseSR与潜在扩散模型的跨中心应用实践 在医学影像分析领域,高分辨率脑部MRI数据对疾病诊断和治疗规划至关重要。然而现实情况是,不同医疗机构的扫描设备、协议和参数存在显著差异,导致获取的影像质量参…...
镜像视界|AI智能体驱动的无感定位系统:从识别到控制的跃迁副标题:融合行为建模与轨迹预测的空间级目标管理体系
镜像视界|AI智能体驱动的无感定位系统:从识别到控制的跃迁——融合行为建模与轨迹预测的空间级目标管理体系一、范式升级:AI正在从“工具”进化为“智能体”在传统视频与AI系统中,人工智能的角色长期被定义为“工具”:…...
