目录
你的报错核心原因是:VS Code 现在用的是 rustc main.rs 直接编译,而不是 cargo run。
日志里很明显:
rustc main.rs
直接用 rustc 编译时,如果没有指定 edition,会按旧的 Rust 2015 处理;而 async fn 需要 Rust 2018 或更高版本。Cargo 官方文档也说明,Cargo.toml 里的 edition 会决定包的 Rust Edition;如果没写 edition,则会为了兼容性默认按 2015 处理。(Rust 文档)
推荐修复方式:用 Cargo 运行
你应该在包含 Cargo.toml 的项目根目录执行:
cargo run
不要在 src/ 目录里直接执行 rustc main.rs。
你的项目应该类似这样:
01.Workbench-Backend/
├── Cargo.toml
└── src/
└── main.rs
Cargo.toml 建议这样写:
[package]
name = "workbench-backend"
version = "0.1.0"
edition = "2024"
[dependencies]
anyhow = "1"
tokio = { version = "1", features = ["full"] }
src/main.rs 示例:
use anyhow::Result;
#[tokio::main]
async fn main() -> Result<()> {
println!("Hello Rust async main!");
Ok(())
}
注意:Rust 的 async 代码通常需要运行时来执行,例如 Tokio。Rust 官方书也提到 async/await 语法需要配合 runtime 来执行异步函数。(Rust 文档)
VS Code 里怎么改
你现在大概率点的是 Run Code,也就是 Code Runner 插件,它会直接跑:
rustc main.rs
这不适合正式 Rust 项目。
建议这样做:
方式一:直接用 VS Code 终端
打开项目根目录:
cd /Users/albertwen/www/projects/java/DevOps/Fuyo-AIOps/01.Fuyo-Workbench/01.Workbench-Backend cargo run
方式二:改 Code Runner 配置
打开 VS Code 的 settings.json,加上:
{
"code-runner.runInTerminal": true,
"code-runner.executorMap": {
"rust": "cargo run"
}
}
然后重点是:VS Code 要打开项目根目录,也就是包含 Cargo.toml 的目录,不要只打开 src 目录。
临时修复方式:继续用 rustc
如果你只是单文件测试,可以这样:
rustc --edition=2024 main.rs ./main
但是这个方式不推荐,因为你用了:
use anyhow::Result;
以及可能用了:
#[tokio::main]
这些都属于外部 crate,直接 rustc main.rs 很麻烦,应该交给 Cargo 管理依赖和编译流程。
结论
你的问题不是代码本身错了,而是运行方式错了。
正确做法是:
cd 项目根目录 cargo run
并确保 Cargo.toml 里有:
edition = "2024"
如果你当前项目还没有 Cargo.toml,就在项目根目录执行:
cargo init
然后再把 main.rs 放到:
src/main.rs
最终选择的解决方案:
方式二:改 Code Runner 配置
{
"code-runner.runInTerminal": true,
"code-runner.executorMap": {
"rust": "cargo run"
}
}