为什么 Rust 中的环境变量是 String 类型而不是字符串切片?

Yil*_*maz 1 string environment-variables rust

对于不可变的常量字符串,我们使用&str. 例如,

let url: &'static str = "yourUrl";
Run Code Online (Sandbox Code Playgroud)

url是一个常量值,不需要修改。它是对 UTF-8 字节序列的引用,我们只是在这里读取它。

但是,环境变量的String类型为:

use dotenv::dotenv;
use std::env;

dotenv().ok();

let api_key: String =
    env::var("Your_api_key").expect("API KEY NOT FOUND");
Run Code Online (Sandbox Code Playgroud)

String是 Rust 中可增长、可变、拥有的类型。它在堆上分配并允许动态修改其内容,但环境变量是常量并在 rust 程序启动时加载。为什么不是类型&str

Mas*_*inn 6

环境变量是常量,并在 rust 程序启动时加载。为什么不是&str类型?

因为环境变量不是常量setenv(3)unsetenv(3)putenv(3)存在(以及clearenv(3)在 glibc 中)。