What’s the role of Golang in a universe where Rust exists?
Imagine you’re a developer who mainly works with Golang. You go to an event and, while chatting with some people, you decide to share with them the news that you wrote a small tool that does something. You claim that since you wrote it in Golang, it’s fairly fast, it’s a single binary, etc. The group seems pleased with your recount and you start feeling good, but then you notice a stranger approaching from behind. A bone-chilling wind blows and you hear: “Why Golang and not Rust?”
Well, you could answer that Golang is what you know, so that’s what you used to solve your problem, but that’s probably not going to be a satisfactory answer. You were pridefully talking about how fast your tool was in the first place, and it’s obvious that the stranger will counter your simplistic excuse with all the great benefits Rust brings over Golang.
You start feeling bad. Why did you choose to learn Go in the first place? You were told that Go is fast and that it has great concurrency primitives, and now Rust comes along and everybody is saying that Rust is better in every aspect. Were they lying before or are they lying now? While there is no single language to rule them all, you know that it’s still possible to make bad choices and end up in a technological cul de sac. After all, you did choose to Go over that other language a few years ago and you were pretty pleased with the routine of joining circles to ask “Why that and not Go?”
While the story above is 100% the result of my imagination, it’s no secret that the Rust fandom has a few overexcited members who feel compelled to enlighten every lost soul about the virtues of the Crab-God. This isn’t really Rust’s fault, every successful project will have misbehaving followers, it’s inevitable. While everyone has to deal with these people, I feel that Golang developers are particularly susceptible to their behavior because of how much Rust’s and Go’s messaging overlap.
Golang is fast, but Rust is faster.
Golang has an efficient garbage collector, but Rust has static memory management.
Golang has great concurrency support, but Rust has provably-correct concurrency.
Golang has interfaces, but Rust has traits and other zero-cost abstractions.