Hi!
Great article: https://brandur.org/go - thanks for writing up your experience. Hope you don't mind if I comment on a few things. Feel free to close this issue anytime 😄
Dependency management: It took me a while to warm up to Go’s design around dependency management, but not having to run and manage everything through a slow and complex system like Bundler hugely improves the development experience. It also makes it very easy to jump into foreign libraries and examine their implementations when necessary.
Really glad you recognized this. Makes the Go experience much more enjoyable!
Error handling: I like that generally my programs don’t crash, but dealing with errors requires an incredible level of micro-management. Worse yet, the encouraged patterns of passing errors around through returns can occasionally make it very difficult to identify the original site of a problem.
Returning errors is an elegant way to handle them. Let the error bubble up the stack to the first function that has enough context to handle it properly. If you want to trace its origin, you can wrap each return with something like this:
if err := doSomething(); err != nil {
return fmt.Errorf("could not do something: %v", err)
}
I've found this to be an effective way to handle errors in my own applications, and to know pretty precisely the flow of the program and where the error came from.
The community: Reading the mailings lists can be still be pretty depressing. Every critique of the language or suggestion for improvement, no matter how valid, is met with a barrage of either “you’re doing it wrongs”, or “only the Go core team that can have thoughts that are worth consideration” Previously this level of zealotry had been reserved for holy crusades and text editors.
You'll find those types anywhere, it's definitely not only from text editor debates. You should try the Gophers Slack and the Go Forum. Both are great places to be a part of the Go community.
Anyway, hopefully this feedback is helpful. Thanks again for your post!