Go is a really interesting language - it’s purpose built (by Google) to run reliable, multithreaded networking applications on servers. It’s genuinely unmatched when it comes to ease of use for multithreaded applications, and it’s just as easy to set up networking applications as it would be in something like .NET. It’s type safe, and It also compiles to machine code on all major operating systems out of the box with a respectably performant garbage collector. It’s also very easy to learn if you’re coming from any similarly structured language (Java, C, C++, C#, …).
All that said, it’s not perfect. Typical OOP paradigms don’t necessarily apply to Go, as it structures
interfaces similar to Rust’s
traits, rather than a Java or C++
class. Porting WPILib to Go would be a rather large ordeal due to this fact and would require a decent amount of prior experience in Go before architecting a system that large.
And perhaps there’s the biggest drawbacks in many peoples eyes - a lack of inheritance and/or generics.
However, a language of this design is certainly interesting in the embedded space, and there are a few projects like Gobot taking advantage of it. Although lately, several languages have been popping up as “possibly interesting” in the embedded space - particularly Nim, Crystal, and Rust (I’ve personally taken an interest in Nim).
Here is a really good article on Go’s benefits and drawbacks: https://bluxte.net/musings/2018/04/10/go-good-bad-ugly/