Go 开发者学 Rust:枚举、操作符体验如何?运行时与监控有何不同?
当 Go 开发者遇上 Rust
作者 Paul Hinze 用 Go 编程约十年,一直敬重 Rust 却缺乏深入学习动力。本周 Miren 参加首届 TokioConf,为准备演示,作者搭建了聊天服务器,让 Claude 帮忙编写代码并向其请教。代码放在示例应用仓库,可在 chat.miren.toys 实时访问。
Go 开发者的学习笔记
作者尝试用 Go 开发者思维理解 Rust,认为枚举类型是 Go 一直欠缺的特性,Rust 编译器会自动检查,新增变体时未处理的 `match` 语句会编译报错。`?` 操作符对习惯 `if err != nil` 的开发者是惊喜,但函数隐式退出让作者不适应,体现了两种语言在明确性上的差异。作者还分享了让自己忍不住笑和骂的 Rust 代码,重构后用 `?` 操作符代替复杂 `match` 语句,代码更简洁。Go 表面代码冗长但底层简洁,Rust 表面紧凑但底层不简单。
可见的运行时
Rust 的异步运行时不是语言一部分,需导入运行时库,如 Tokio。Go 的调度机制是语言一部分,底层隐藏。Rust 把底层暴露,运行时机制一目了然。
实时监控
Go 有 pprof,Rust 有 tokio - console 可实时跟踪运行时。在 Rust 里接入只需三行代码并在 `.miren/app.toml` 声明服务端口。聊天室内人员对应任务组,异步编程工作正常,代码和 Tokio 内部代码可在控制台显示。
尚未转变
作者虽学到 Rust 知识,但老 Go 开发者还未转变,Go 语言权衡更适合日常工作,不过从长远看转变有可能发生。
