Rust 语言入门:为什么我选择用 Rust 开发 SaaS?
技术
2025-10-24 742 0 2 min
我写 JavaScript 写了七年,写 Go 写了三年。去年开始,我把新项目的核心服务换成了 Rust。
这不是一次技术炫耀,而是一次被逼出来的选择。
起因:一个内存泄漏
我之前的服务用 Node.js 写,跑在一个 2C4G 的机器上。某天凌晨,监控告警:内存占用从 300MB 涨到了 3.8GB,进程被 OOM 杀掉。
排查了两天,发现是一个缓存 Map 只增不减。修复只花了 5 分钟,但那两天让我意识到:动态类型语言的自由度,是用运行时的确定性换来的。
Rust 给我的三样东西
1. 编译期就能发现的错误
rust
fn main() {
let data = vec![1, 2, 3];
let first = &data[0];
data.push(4); // 编译错误:不能在可变借用期间使用不可变借用
println!("{}", first);
}这段代码在 JavaScript 里会安静地跑出你意想不到的结果,在 Rust 里根本编译不过。把 bug 从线上移到编译器,这是我最有安全感的部分。
2. 可预测的性能
Rust 没有 GC,内存布局可控。同样的 JSON 处理任务,我用 Node.js 跑需要 180ms,用 Rust 只要 12ms。
对 SaaS 来说,这意味着同样的硬件可以服务更多的用户 —— 或者,同样的用户只需要更便宜的硬件。
3. 优秀的错误处理
rust
use std::fs;
fn read_config(path: &str) -> Result<String, std::io::Error> {
let content = fs::read_to_string(path)?;
Ok(content)
}
fn main() {
match read_config("config.toml") {
Ok(c) => println!("配置加载成功,长度 {}", c.len()),
Err(e) => eprintln!("读取失败: {e}"),
}
}Result 强制你处理每一种失败。没有「忘记 try-catch」这回事。
什么时候不该用 Rust
说实话,Rust 不适合所有场景:
- 原型阶段:改一行要等 20 秒编译,创意会被打断
- 纯 CRUD 后台:用 Go 或 TypeScript 快得多
- 团队没有 Rust 经验:学习曲线会拖慢交付
我的做法是:用 TypeScript 做边缘层和页面,用 Rust 做核心计算。边界清晰,各取所长。
我的学习路径
- 先读《The Rust Programming Language》(官方书,免费)
- 用 Rust 重写一个自己熟悉的小工具,比如日志分析脚本
- 读
tokio的 examples,理解异步模型 - 最后才碰 Web 框架(我用的是
axum)
不要一上来就写 Web 服务。先用 Rust 写几个命令行工具,把所有权和生命周期的直觉建立起来。
一个最小的 axum 服务
rust
use axum::{routing::get, Router, Json};
use serde_json::json;
async fn health() -> Json<serde_json::Value> {
Json(json!({ "status": "ok" }))
}
#[tokio::main]
async fn main() {
let app = Router::new().route("/health", get(health));
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
axum::serve(listener, app).await.unwrap();
}二十行,一个生产可用的健康检查服务。
结论
Rust 不会让你变成更好的程序员,但它会让你写出更难出错的程序。
如果你正在做一个需要长期维护、对稳定性有要求的服务,值得投入时间学它。如果只是验证想法,先用你最熟的语言。
评论
友善交流,邮箱不会公开