If you ask a Go developer nowadays why they chose Go, they’d probably say, “because Go is the go-to backend and DevOps language, everyone around uses it.” But back when Go was young, what were the reasons people would choose Go despite it was not yet as widespread as it is today?
Yes you were reading right. When Go 1.0 was released in 2011, the critics raised their voices. According to them, Go ditches every advancement that programming languages made in the last decades: No inheritance, no generics, no fancy language features that support clever coding, no option types, no union types, no this, no that. Go seemed like the most backward-oriented language around. Go was simply boring.
And this actually turned out to be a unique selling point. Boring means no surprises. Boring means readable. Boring means you can look at someone else's code and can actually understand what the code is doing, without looking up a stack of super- and super-super-classes, without examining overloaded operators or diving into the language spec to read about an esoteric language feature that the code author used but you never heard of.
Sure, Go attracted the curious audience with some goodies, like the famous goroutines, of which you can spawn millions without grinding the system to a halt, or Go’s ability to compile static, self-contained binaries, and even compile them for different platforms, without needing platform-specific tool chains.