Conversation

A lot of people complain about Go's repetitive err checking pattern, but it's very familiar if you've ever written systems code in C. If you aren't checking return values and errno from every system call (and able to log them), you're code is going to be impossible to debug.
7
47
Replying to
The issue with the approach in Go is not that the errors need to be handled from each call. The issue is the language is inexpressive, overly verbose and forces massive amounts of duplicated code for this. It doesn't have a way to return a result or an error or to work with that.
2
4
Replying to and
It forces always returning both a result and an error, and it does that via a hard-wired multiple return value feature rather than a type like a tuple which would lend itself to less code repetition. Avoiding exceptions doesn't imply having this kind of verbosity / repetition.
2
2
Replying to
Returning a tuple is also a bad implementation, because you don't actually want to return the result and the error, but rather either the result or the error. It would still be much better than the special-cased multiple return value since you can actually have code reuse for it.
1
4
Replying to and
Go has interfaces, which it could be using to support that kind of composition and code reuse. There's even an error interface already. I don't really understand going 90% of the way to making it work decently but then having the weird special cases and shortcuts that they use.
Replying to
It seems like a consequence of core decisions about the type system (e.g. not supporting algebraic data types). I'm not sure if I'd agree that it's hostile to code reuse, you just have to reuse at a higher level of abstraction (libraries).
1
2
Replying to
It doesn't have good support for reuse via libraries since in so many cases it forces writing specialized code or use the awful hack of reflection and dynamic casting. In that sense it's a lot like Java before it had half-baked generics. I wouldn't call these conscious decisions.
1
1
Show replies