在 Rust 中让字符串“永久”

问题描述 投票:0回答:1

在我的示例中,我获取一个环境变量并将其传递到 Reqwest 标头中:

let token: String = String::from(
        env::var("TOKEN").expect("TOKEN must be set!"),
    );

let mut headers: HeaderMap = HeaderMap::new();
        headers.insert(
            AUTHORIZATION,
            HeaderValue::from_static(&format!("Bearer {}", token)),
        );

我认为我什至不需要

String::from
,但我希望能够复制该字符串,而不是从
env::var
借用它。

编译器返回此错误:

借用时暂时价值下降
创建一个临时值,该值在仍在使用时被释放

对于

&format!("Bearer {}", token)
,据我了解,这是因为 String 需要是静态的。 如果不使用像
lazy_static
这样的库,有没有办法可以更好地做到这一点?

rust
1个回答
0
投票

HeaderValue
实现了
TryFrom<String>
,因此您可以使用
try_into
进行转换。

headers.insert(
    AUTHORIZATION,
    format!("Bearer {}", token).try_into().expect("invalid characters"),
);

您可以使用

OnceLock
将其设为静态,但这不是必需的,除非您多次创建此
HeaderMap

© www.soinside.com 2019 - 2024. All rights reserved.