Rust 能否在后端工作中取代 Go,還是這只是炒作?
大家都愛押冠軍,直到值班電話響起。
我把同一套 API各寫了一份:Rust 版、Go 版;然后上壓測、拉并發,看 p95 抖不抖、內存漲不漲。
結論很扎心:Rust 形狀更穩,Go 上線更快。 圖表不站隊,這才是答案的起點。
Rust 真正贏的地方:服務在抖,它不抖
同時壓低延遲和內存,Rust 更淡定。借用/所有權第一天看著苛刻,但它直接刪掉了一類會在突發流量下暴雷的 bug。
use axum::{routing::get, Router};
use serde::Serialize;
#[derive(Serialize)]
struct Pong { ok: bool, ts: i64 }
#[tokio::main]
async fn main() {
let app = Router::new().route("/ping", get(|| async {
axum::Json(Pong { ok: true, ts: chrono::Utc::now().timestamp() })
}));
axum::Server::bind(&"0.0.0.0:8080".parse().unwrap())
.serve(app.into_make_service())
.await
.unwrap();
}在持續壓力下,堆占用更緊、長尾更晚出現,吞吐更像平滑降級,而不是隨機晃。 如果要嚴格控資源,我會選 Rust:薄框架起步,剖析分配點,避免在高扇出里濫 clone。
Go 仍然打表的地方:冷啟動快、CRUD 秒上線、團隊好落地
冷啟動、簡單 CRUD、快速上手基本屬于 Go 的主場。 工具鏈順滑,反饋環小,五分鐘一個接口,當天能發版。
package main
import "net/http"
func main() {
http.HandleFunc("/ping", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.Write([]byte(`{"ok":true}`))
})
http.ListenAndServe(":8080", nil)
}發布節奏持續穩定,事故排查也直給,因為表面積小、套路熟。 當路徑清晰、SLO 不卷時,我拿 Go:加個worker pool、限制隊列深度,先量 p95 再加騷操作。
被忽略的隱藏成本:開發回環速度才是效率黑洞
很多團隊為性能換語言,然后在慢反饋里賠回去。
+---------------------------+
| Edit -> Build -> Run |
+---------------------------+語言 | Build(s) | 開發手感 |
Go | 0.3–1.2 | 輕快 |
Rust | 2–9 | 穩,但慢 |
慢回環會默默拉低士氣,壓縮每天的迭代次數,最后影響質量與發版時機。小團隊 + 剛性時間點時,更快的回環更抗風險。 性能要實測,但請守住你吃飯的迭代速度。
背壓下的內存與長尾:戰爭不在語法,在“隊列漲起來”的那一秒
當下游卡住、隊列被撐滿,才分出高下。
+-------+ q1 +---------+
req -> | LB |========>| Service |
+-------+ +----+----+
|
v
+----+
| DB |
+----+Rust 讓我更緊地約束分配,所以隊列增長更晚才疼。 Go 讓我輕松控 goroutine 數量,系統看起來更活,但在瞬時流量里更要盯 GC 抖動。
同一場 DB 拖慢下,Rust 的多秒級離群值更少; Go 想穩住 p99,就要更激進地剪隊列。
不管哪門語言,暫停要被設計:熔斷、背壓、超時一個不能少。長尾控制靠架構,不靠語法糖。
當“正確性壓力”不可談判:錢、簽名、代理、苛刻延遲
支付、簽名校驗、低層代理、或亞毫秒級熱路徑,要的是更強的編譯期保證。 Rust 的類型 + 所有權,能把一批錯誤卡在編譯器門口。
use bytes::Bytes;
fn slice_window(buf: &Bytes) -> Option<&[u8]> {
if buf.len() >= 8 { Some(&buf[..8]) } else { None }
}
fn main() {
let data = Bytes::from_static(b"abcdefgh");
if let Some(win) = slice_window(&data) {
// 借用檢查、零拷貝
println!("{}", win.len());
}
}當邊界條件暴增,這類保證會減事故總量,值班手機也更安靜。泄錢、傷信任的路徑,我偏 Rust:接口收緊、量拷貝、評審盯生命周期和所有權。
團隊規模與生態現實:別把“綠地”想成游樂園
Go 的標準庫能 cover 大部分服務; Rust 的crates很強,但選擇會分叉,而且編譯錯誤會拖慢新人的第一周。
+-------------------------------+
| 決策維度:庫、招聘、技能結構 |
+-------------------------------+
| Go:stdlib 覆蓋 80% |
| Rust:第三方強但選擇多 |
| 招聘:Go 人才池通常更大 |
+-------------------------------+所以常見軌跡是:Go 項目更快進入穩定速度,Rust 項目在團隊模型消化后,能達到更高峰值效率。
要寬度、要節奏我配 Go;要壓資源、要榨機器我配 Rust。
總結
Rust 不會“干掉” Go;“干掉論”是把上下文剁沒了。
- Rust:在同樣的機器上擠出更多、長尾馴服,當每毫秒都要命時它值回票價。
- Go:每個迭代多發點功能、團隊動得起來,讓產品先上路再調參。
選型三要素:SLO、團隊經驗、流量形狀。 如果這個答案顯得無聊——恭喜你,能讓值班靜音、現金流穩定的,往往都是“無聊的選擇”。





















