我try 从the mysql crate's documentation的基本示例开始,但使用的是格式化字符串,而不是完全硬编码的字符串:

use mysql::*;
use std::error::Error;

fn main() -> Result<(), Box<dyn Error>> {
    // These will be read from a config file
    let user = "root";
    let pw = "password";
    let host = "localhost";
    let port = 3307;
    let db = "db_name";

    let url = format!("mysql://{user}:{pw}@{host}:{port}/{db}");
    let pool = Pool::new(url)?; // Error at this line
    let mut conn = pool.get_conn()?;
    
    Ok(())
}

但是,我得到了这个错误:

error[E0277]: the trait bound `Opts: From<std::string::String>` is not satisfied
   --> src/main.rs:13:23
    |
13  |     let pool = Pool::new(url)?;
    |                --------- ^^^ the trait `From<std::string::String>` is not implemented for `Opts`
    |                |
    |                required by a bound introduced by this call

我是铁 rust 新手,整个晚上都在寻找解决方案.为什么format!的输出不执行From<String>?如何将格式化的字符串而不是硬编码的字符串传递给Pool::new?谢谢

推荐答案

我会构建一个OptsBuilder而不是一个连接字符串:

use mysql::*;
use std::error::Error;

fn main() -> Result<(), Box<dyn Error>> {
    // These will be read from a config file
    let user = "root";
    let pw = "password";
    let host = "localhost";
    let port = 3307;
    let db = "db_name";
    let opts = OptsBuilder::new()
        .user(Some(user))
        .pass(Some(pw))
        .ip_or_hostname(Some(host))
        .tcp_port(port)
        .db_name(Some(db));
    let pool = Pool::new(opts)?;
    let mut conn = pool.get_conn()?;

    Ok(())
}

但如果您真的想这样做,您可以只将format!生成的String转换为&str,因为涉及到泛型,最简单的方法是使用.as_str():

    let url = format!("mysql://{user}:{pw}@{host}:{port}/{db}");
    let pool = Pool::new(url.as_str())?;

Rust相关问答推荐

如果A == B,则将Rc A下推到Rc B

是否有可能同时避免不兼容的不透明类型和代码重复?

MPSC频道在接收器处阻塞

在我的Cargo 中,当我在建筑物中使用时,找不到我可以在产品包中使用的 crate .r我如何解决这个问题?

如何创建一个可变的嵌套迭代器?

你能在Rust中弃用一个属性吗?

将泛型中的 Box 转换为 rust 中的 Box

需要一个有序向量来进行 struct 初始化

当没有实际结果时,如何在 Rust 中强制执行错误处理?

有没有办法隐式绑定 let/match 操作的成员?

rust tokio::spawn 在 mutexguard 之后等待

使用 rust 在 google cloud run (docker) 中访问环境变量的适当方法

为什么 Rust 允许写入不可变的 RwLock?

如何获取包裹在 Arc<> 和 RwLock<> 中的 Rust HashMap<> 的长度?

在 Rust 中为泛型 struct 编写一次特征绑定

在单独的线程上运行 actix web 服务器

深度嵌套枚举的清洁匹配臂

在 Rust 中有条件地导入?

为什么 u64::trailing_zeros() 在无分支工作时生成分支程序集?

有没有比多个 push_str() 调用更好的方法将字符串链接在一起?