Golang exists for a few simple reasons:
- Google engineers kept committing incomprehensible meta templates that took forever to compile.
- It was too much of a lift to shoe-horn co-routine's into established procedural languages.
- If you allow a user to have void*, they will eventually use it and something will blow up.
It's fairly pragmatic. Though it has a syntax most inline with C development, it has cultural values more in line with Java. The purpose of the language was for developers to standardize and conform. Understandable in an organization with more committers than most popular open sources projects.
It does a lot right.
Its standard library is portable and without a mangled ABI. Many of its programs rely on nothing but statically linked functions and a few platform shared object links. Its binary is fairly tiny.
Its native event loop is highly reliable and well scheduled. Its user space context switching is fast. And its stack size is low. It's the first procedural language with a sane native control flow for concurrent threads. Sure, Erlang came far earlier - but it is difficult to program in the rigid functional paradigm.
Its library is mature and fairly useful.
And it's reliable developer base has continued to make it useful to developers around the world for a rather diverse set of requirements.
It removes the art from programming...
At least for me, anyways.
Golang is naked. When looking at Python or Ruby code, I do not have to think about the process which will emit byte code through a virtual machine. If you are one of the unfortunate C developers that lived through 'Object Oriented C' and the pages of manually written virtual function table assignment code... Golang might give you flashbacks. Even C++ masked them with its (un-)winding construction of inheritence.
Go sought to make it impossible to create endless object class inheritances with infuriating calling conventions. A plague grown from the labs of computer science departments trying to formalize software practices akin to other traditional engineering disciplines.
The problem is, complex object hierarchies actually exist. Consequently, Go is the possibly the worlds worst modeling language.
Companies are misusing it
Within Google, perhaps 1 out of 10 people use Go. Why not all of them? Go is a language designed to route and multiplex data to the appropriate processing systems. Go is not designed to model business or scientific logic!