Why Go Can't Try
7 hours ago
- #Error Handling
- #Zig
- #Go
- Go developers often write verbose error handling code, envying Zig and Rust's concise syntax.
- Zig's error handling is more explicit than Go's, with compiler-enforced checks on error handling.
- Go's error handling is verbose but not enforced by the compiler, allowing unchecked errors.
- Adding a 'try' keyword in Go is complicated by the language's unstructured error type system.
- Zig's error system uses compiler-known, finite error sets, enabling exhaustive checks.
- Go's error type is an interface, allowing arbitrary error types but lacking compile-time guarantees.
- Zig's errors are lightweight integers without payloads, relying on error return traces for context.
- Changing Go's error system to be more like Zig's would break existing code and libraries.
- The Go team resists 'try' because it would require a fundamental, incompatible redesign of the error system.
- Go's error handling is deeply embedded in its ecosystem, making significant changes impractical.