- Go through the tour at https://tour.golang.org/welcome/1
- Promptly abandon all of those plans you have to use channels everywhere
- Read the language spec once over: https://golang.org/ref/spec
- https://dave.cheney.net/2017/04/26/understand-go-pointers-in-less-than-800-words-or-your-money-back
- Read Effective Go: https://golang.org/doc/effective_go.html
- Read CodeReviewComments (essentially a semi-official style guide) https://github.com/golang/go/wiki/CodeReviewComments
- http://devs.cloudimmunity.com/gotchas-and-common-mistakes-in-go-golang/
- https://coder.today/tech/2018-11-10_profiling-your-golang-app-in-3-steps/ This is a very effective tool in your toolbelt, and you will use it A LOT.
- And a smattering of other good articles:
- https://dave.cheney.net/category/golang (starting with https://dave.cheney.net/2016/04/27/dont-just-check-errors-handle-them-gracefully)
- https://medium.com/statuscode/how-i-write-go-http-services-after-seven-years-37c208122831
- https://peter.bourgon.org/go-best-practices-2016/
- https://peter.bourgon.org/go-for-industrial-programming/
- IDES
- I generally use vim & vim-go
- vscode is excellent as well. It is only a few (but serious) problems in the vim bindings that keep me with Vim...for now.
- goland is also very good. The JetBrains folks are very good. I don't like the license model, but I understand the need to make a buck, and it does a lot of really impressive things that the others don't, esp with regard to refactoring.
- Other
- Dash for OSX is great for local doc searching
Testing is a first-level concept in Go, and is very important. I recommend reading up on table driven tests, and subtests/benchmarks. These combine well.
Stick to the stdlib testing package for your first couple projects. You can branch out to test frameworks later, but I would encourage you to identify a deep need before doing so. I have yet to find a truly compelling case for other testing frameworks. Perhaps matching libraries. Maybe.
When testing services, you will find yourself having a much easier time if you use dependency injection through interfaces, and for this, nothing beats a good mocking framework. I typically use gomock, but there are others.
It helps to learn the standard library well, especially strings os and regexp.
You will eventually find yourself writing your own sort of scripty helper libraries like https://github.com/bitfield/script for quick one offs.
If you want to stay current, I recommend installing Go from source, and I've written a guide to do that here. Please let me know if you find any problems.