Hasty Briefsbeta

双语

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的错误处理已深度嵌入其生态系统,进行重大改动实际不可行