在项目中,我们通常需要设置一些环境变量,用来保存一些凭证或其它数据,这时我们可以使用 dotenv 这个 crate。

首先在项目中添加 dotenv 这个依赖:

例如在下面这个项目中,需要设置数据库连接字符串和 Debug 等级这两个环境变量。在开发环境下,我们可以在项目根目录下创建 .env 这个文件:

在 .env 文件里,我们设置两个环境变量,分别是 DB_URL 和 LOG_LEVEL:

下面来到 main.rs,想要访问系统的环境变量,我们使用标准库的 std::env 即可:

这里,我们先把获取到的环境变量进行遍历和打印,然后再分别尝试打印 PATH、DB_URL 和 LOG_LEVEL 这三个环境变量的值。

结果如下:

我们可以看到,前面是遍历打印的环境变量,后边打印出了 PATH 的值。然后在尝试获取 DB_URL 值的时候程序就恐慌了,因为没有找到这个环境变量。

现在我们使用 dotenv 这个 crate:

先把 dotenv 导入,然后在程序开始的地方执行 dotenv() 函数即可,这就会从当前目录或父目录中的 .env 文件中加载环境变量。

如果你想指定其它路径,可以使用 crate 中提供的 from_filename 或 from_path 这两个函数。

好,那么调用 dotenv() 之后为什么还要调用 ok() 方法?

首先,dotenv() 返回的是 Result<PathBuf> 类型,如果返回值不使用的话,就会发出一个警告:

调用 ok() 之后,会把 Result 转化为 Option,而 Option 就不会产生未使用 Result 的警告了。

那么,为什么不使用 unwrap()?

因为在生产环境中,你不会使用 .env 这个文件,你应该使用真实的环境变量,这时 dotenv() 函数就会加载失败,如果使用 unwrap(),那么你的程序就会停止运行。

所以这里使用 ok() 的目的就是当加载 dotenv 环境文件失败的时候可以忽略错误。

代码:

 1 use std::env;
2 use dotenv::dotenv;
3
4 fn main() {
5 dotenv().ok();
6
7 for (k, v) in env::vars() {
8 println!("{}: {}", k, v);
9 }
10
11 println!("PATH: {}", env::var("PATH").unwrap());
12 println!("DB: {}", env::var("DB_URL").unwrap());
13 println!("LOG: {}", env::var("LOG_LEVEL").unwrap());
14 }

Rust 使用 dotenv 来设置环境变量的更多相关文章

  1. Linux下设置环境变量

    setenv(set environment variable) 功能说明:查询或显示环境变量. 语 法:setenv [变量名称][变量值] 补充说明:setenv为tsch中查询或设置环境变量的指 ...

  2. Mac 可设置环境变量的位置、查看和添加PATH环境变量

    Mac 启动加载文件位置(可设置环境变量) ------------------------------------------------------- (1)首先要知道你使用的Mac OS X是什 ...

  3. MAC 设置环境变量path的几种方法

    mac 一般使用bash作为默认shell Mac系统的环境变量,加载顺序为:/etc/profile /etc/paths ~/.bash_profile ~/.bash_login ~/.prof ...

  4. C语言的编译过程、安装gcc编译器以及设置环境变量

    以我对C语言编译过程的了解,我用了一点时间画了一个图,提供给大家参考一下,希望有些能对您的问题提上帮助. 前几天刚初步学习了C语言的编译过程,感触挺深的.在C语言中头文件其实起了一个很大的作用. 1. ...

  5. linux命令 - export - 设置环境变量

    linux命令 - export - 设置环境变量 功能说明:设置或显示环境变量. 语 法:export [-fnp][变量名称]=[变量设置值] 补充说明:在shell中执行程序时,shell会提供 ...

  6. el captain设置环境变量

    这里说的不是设置变量给bash/shell来用, 而是给程序使用, 比如, chromium自36版以后, 就不再内置google api keys, 官方文档(http://www.chromium ...

  7. Linux设置环境变量小结:设置永久变量&临时变量 全局变量&局部变量

    1.总结背景 在linux系统下,如果你下载并安装了应用程序,很有可能在键入它的名称时出现“command not found”的提示内容.如果每次都到安装目标文件夹内,找到可执行文件来进行操作就太繁 ...

  8. 在package.json里面的script设置环境变量,区分开发及生产环境。注意mac与windows的设置方式不一样

    在package.json里面的script设置环境变量,区分开发及生产环境. 注意mac与windows的设置方式不一样. "scripts": { "publish- ...

  9. Linux和Windows下查看、设置环境变量的比较

    [一]查看环境变量: 1.windows 查看所有的变量:set    范例:>set    查看某个变量的值:set 环境变量名    范例:     >set JAVA_HOME    ...

随机推荐

  1. .Net Core 项目发布在IIS上 访问404 问题对应

    对策: 1.进入线程池画面,将当前程序的线程池设为"无托管代码"   2.修改配置文件 Web.config,加上配置   原因: 因为.NetCore 5.0 自带集成了Swag ...

  2. flink启动报错:java.lang.NoSuchMethodError: org.apache.flink.api.java.ClosureCleaner.clean(Ljava/lang/Object;Z)V

    这是因为pom文件引入的flink相关依赖设置成了provided 作用域 要嘛把这个去掉 但是如果是IDEA的话 可以更简单的操作 把这个打勾保存 接着重新启动main方法即可

  3. SpringBoot简单整合分布式任务调度平台(XXL-JOB)

    官方文档:https://www.xuxueli.com/xxl-job/#%E3%80%8A%E5%88%86%E5%B8%83%E5%BC%8F%E4%BB%BB%E5%8A%A1%E8%B0%8 ...

  4. JS设置网站所有字体变为繁体字

    引入chinese.js var zh_default='n';var zh_choose='t';var zh_expires=7;var zh_class='zh_click';var zh_st ...

  5. 【LeetCode】666. Path Sum IV 解题报告 (C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 DFS 日期 题目地址:https://leetcod ...

  6. 【LeetCode】811. Subdomain Visit Count 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典统计次数 日期 题目地址:https://lee ...

  7. Polyomino Composer(UVA12291)

    Description   Polyomino Composer  A polyomino is a plane geometric figure formed by joining one or m ...

  8. Redis常见使用场景

    缓存 数据共享分布式 分布式锁 全局ID 计数器 限流 位统计 购物车 用户消息时间线timeline 消息队列 抽奖 点赞.签到.打卡 商品标签 商品筛选 用户关注.推荐模型 排行榜 1.缓存 St ...

  9. 【微信小程序云开发】1分钟学会实现上传、下载、预览、删除图片,并且以九宫格展示图片

    大家好,我叫小秃僧 这篇文章是讲解云开发如何上传.下载.预览.删除图片,并且以九宫格展示图片的功能 @ 目录 1. 实现效果 2.JavaScript代码 3.wxml代码 4.wxss代码 1. 实 ...

  10. Tomcat 服务器的端口会与其他的服务器端口发生冲突,此时则需要修改 Tomcat 服务器的端口

    查看相关知识 查看相关练习 Tomcat 服务器的端口会与其他的服务器端口发生冲突,此时则需要修改 Tomcat 服务器的端口 实现步骤: 1.找到 Tomcat 服务器安装目录下的 conf 文件夹 ...