学 Rust 三个月:从一个 Go 开发者的视角
作为一个写了五年 Go 的人,学习 Rust 的前三个月充满了挣扎和顿悟。
Borrow Checker:最陡的学习曲线
Go 的 GC 让你几乎不需要思考内存管理,Rust 则要求你在编译时就证明内存安全性。最开始的三周几乎每天在和编译器打架。但一旦理解了这个模型,你会发现自己写的代码天然没有 data race、use-after-free 等问题。
Trait vs Interface
Rust 的 trait 比 Go 的 interface 更强大——可以有默认实现,可以有关联类型,还可以在外部类型上实现外部 trait(orphan rule 的限制也值得思考)。
错误处理
Rust 的 Result<T, E> 和 ? 操作符比 Go 的 if err != nil 更优雅。但 anyhow 和 thiserror 的存在说明标准库的错误处理还不够完善。
总结
Go 的哲学是简单直接,适合快速交付;Rust 的哲学是零成本抽象和安全,适合对性能和正确性有极致要求的场景。两者不是替代关系,而是互补。