Go in a few words…
Go is a high-level, statically, and strongly typed programming language developed at Google. If you are coming from the C family of languages Go would be pretty intuitive to pick up. Go has a very minimal core library, as a result, the learning curve is pretty minimal as compared to other programming languages.
Go popularity stems from the concurrency features, especially from Goroutines which are lightweight, green threads managed by the go scheduler. “Lightweightness” comes from the dynamic stack size as a result we can spawn tens of thousands of goroutines on a simple laptop.
Go also provides built-in primitives called channels to communicate effectively between the goroutines. As Rob Pike famously quoted:
Don’t communicate by sharing memory; share memory by communicating.
Go’s a major chunk of popularity is attributed to K8s / Docker and surrounding tooling to support these technologies. Go became the “Go-to” language in DevOps and Cloud native systems.
Unlike C/C++, Go is garbage collected and unlike Java, it doesn’t have generational garbage collection but relies on the smart implementation of Mark and Sweep.
With greater power, comes a few weaknesses; the same goes with Go. Go’s core library is limited so it leaves everything to the developer for efficient and standardized coding and maintainability. Go error handling has been a point of debate as every programming language has a try-catch pattern. Go also doesn’t have some of the OOPs features like function and operator overloading. It doesn’t have an inheritance in the true sense but relies on composition.
All in all, Go became quite popular in small time owning to its small learning curve and rich concurrency primitives.