I love Go, used it a lot for over 3 years. I love the simplicity, directness, the inline structs, but I still cannot get out of the package management mess. I can even tolerate `if err != nil, return err` and do not care enoguh of generics, but I hope Go modules and Go 2 would fix, over the time, it has really become a love-hate relationship for me. My daily driver at work is Java and some Python, I really miss the tooling (of course, not runtime classnotfound errors) and maturity. Not ignoring the success of projects with Go, such a big one as Kubernetes, I think it is a whole different aspect, but Go started to tear me out through the years, and it is hard to defend it.
There is no better way to do errors imo, unless you're going the erlang way of "let it fail". Errors can be passed to the caller the same way exceptions are, and it becomes an endless pursuit of where the error is actually being handled (if at all). I agree that some syntax sugar helps, see Rust, but it doesn't completely fixes the problem.
It's baffling though that the compiler doesn't at least warn when you forget to check the err. So many edge cases with that (especially due to `:=` vs `=` if reassigning a prior err).
Try gometalinter. https://stackoverflow.com/questions/43898074/is-there-a-way-...