Go is a decent language, with some really good built in protections (great concurrency model), a massive standard library, and a single binary output that's immensely portable (compared to pretty much anything other than C/C++/D, etc).<p>Those are some of the main reasons... it's great for pushing data with relatively low overhead, and relatively high safety.<p>Compared to Rust, you could do very similar, but the language is a much larger break from what most are used to.<p>Compared to Java/C#, you don't have a relatively large runtime to install, not nearly as portable. I really like C# myself, but it's not for all use cases, and the framework need make it a poorer choice for infrastructure tooling. Also the concurrency model is more transparent in go... in C#, for example, you can use pooling techniques, but they take more thought and planning. Java has a history of huge overhead and tooling as well.<p>Compared to scripted languages, not worth even considering.<p>It really depends on your needs, but the fact is that Go and Rust are fairly new, but build with specific needs in mind and do most of them better than other options, with better safety and more transparent ease of use. Go tends to be better for networking/communications, and Rust tends to be better with interacting on system internals.<p>This is from a conscientious observer. I haven't had a good use case for either, but may have one for go coming up, so looking forward to that.