Why Go Can't Try
3 months ago
- #Error Handling
- #Zig
- #Go
- Go开发者经常需要编写冗长的错误处理代码,羡慕Zig和Rust简洁的语法
- Zig的错误处理比Go更显式,编译器会强制检查错误处理
- Go的错误处理虽然冗长,但编译器不强制检查,允许未处理的错误存在
- 在Go中添加'try'关键字很复杂,因为该语言采用非结构化的错误类型系统
- Zig的错误系统使用编译器已知的有限错误集合,支持穷尽性检查
- Go的错误类型是接口,允许任意错误类型但缺乏编译时保证
- Zig的错误是轻量级整数(不带负载),依靠错误返回轨迹提供上下文
- 将Go的错误系统改造成类似Zig会破坏现有代码和库的兼容性
- Go团队抵制'try'语法,因为这需要对错误系统进行根本性且不兼容的重构
- Go的错误处理已深度嵌入其生态系统,进行重大改动实际不可行