So I was curious and wanted to step out of my bubble and expand my horizon. I tried to find out more about Go's design philosophy and the main use cases it would excel at. I already knew about its useful async runtime because that was considered in the design of Kotlin's coroutines. Beyond that, unfortunately, what I found was even worse than what I expected, best summarized
in this article.
It seems that Go is not just lacking the type of expressiveness which our human brains are wired for (they love generalization/specialization relationships and can understand structures making proper use of that much faster). Its structuring capabilities are pretty limited, making them easy to learn but leading to lots of boilerplate with a bad signal/noise ratio in user code. Worse than that, Go is unsafe to use at scale unless everyone using it is very proficient and extremely disciplined. Seems like its creators engineered not just one but multiple variants of the billion dollar mistake into one language. (Details explained in the article.)
The article's final conclusion is well substantiated:
> Because there is a lot to like in Go at first, because it’s so easy to pick up, but so hard to move away from, and because the cost of choosing it in the first place reveals itself slowly over time, and compounds, only becoming unbearable when it’s much too late, this is not a discussion we can afford to ignore as an industry.