I might still be tempted to launch up my Python development environment for more data science tasks, but Go has really been creeping on to me for everything else.
Quick summary of what I love about Go:
- Features to enforce standards keeping your code clean as it scales,
- built-in auto formatter,
- compile errors thrown for dead code,
- simple package structure,
- coherent type system (yes, even with value types and references gotchas),
- clean syntax making it feel like an interpreted language,
- errors as values,
- Built-in testing and benchmarking frameworks
- Built-in concurrency primitives
- Simple and modern flow statements (defer, panic and recover)
Go definitely can be challenging if you are coming from an object oriented language because Go is not an object oriented language. Composition and other sorts of relationships are expressed through custom struct types and interfaces. I personally have really enjoyed learning a new programming paradigm; and I feel surprisingly efficient working with this paradigm.
I would suggest to anyone interested in developing modern applications for the cloud to look into learning Go. I started by following the Go Tour of the official documentation and then played around with the language for some smaller scripting projects mostly around data migrations.
After completing the official Tour of Go, I followed the course entitled Go: The Complete Developers Guide by Stephen Grider on Udemy. I would highly recommend the course, it goes in depth on the same subjects of the Go Tour but with a lot more visual examples and a somewhat slower pace.
I also followed the course entitled “Introduction to industry REST microservices in Golang (Go) by Frederic Leon. The course gave more concrete examples on building actual production applications. The content is definitely less pedagogically focused than Stephen Grider’s course, but it is much more advanced and specific. It covers everything from using great external tools for testing (testify) and external http frameworks (gin-gonic) to create REST microservices. More importantly, Frederico Covers a lot of design and architectural questions for building microservices and emphasizes how to test them at all levels (unit, integration and acceptance).
I look forward to sharing further practical examples with the Go shortly!
Do not hesitate to reach out if you have any questions or comments.