In my work life I’m involved with projects in Ruby, Python, Swift, Rust, Javascript, Typescript. I don’t have strong programming language preferences and believe in the “right tool for the job” approach: the language should be a good fit for a problem domain, team expertise, time/budget constrains, etc. Rust is my go-to language when high-performance, strong type safety, rich ecosystem, compiled language is required.
Go is often suggested in similar circumstances, and I’ve read a couple Go books, but I could
never understand why someone would prefer Go to Rust: Rust is much safer, much richer language; Rust’s strict and pedantic
compile-time checks help avoid whole classes of bugs that could bite you in Go. Even when the features are quite similar
(error checking), Rust approach (?
operator) is elegant and makes the code so much easier to read.
However, some folks who I deeply respect suggest that I actually try writing some Go code, instead of forming an opinion
by just reading it. When I was learning Rust 4 years ago, I wrote a simple app
to set my Slack status to pre-defined values from a command line. I’m still using this app, it’s quite useful to write
slack_status lunch
and have my status changed in multiple Slack accounts at once.
I decided to rewrite this utility in Go. I must say, yes, it’s
as annoying to write all those if err != nil { return err }
as I imagined, and I didn’t feel as confident in the
correctness of my code as I would have if this was Rust, but… I felt so much more productive writing Go!
The language is very simple, it rarely gets in the way Rust often does. The ecosystem is so rich there’s a module for
everything. And the tooling is great too! I thought I’ll need at least a few days to rewrite slack-status
in Go, but
I was done in just a couple of hours.
Not every project needs the performance or the guardrails that Rust provides. I’m looking forward to dive deeper into Go and truly make it a part of my toolbox.