When Golang was introduced by Google, it was the go-to language for new programmers, as its learning curve was comparatively lower than that of other programming languages like C or Java. The language is really simple and, due to a static type system, it is also faster than several existing programming languages.
The language is suitable for service-oriented architectures with excellent scalability because of its small, modern, and simple architecture and its use of only 25 keywords. Additionally, it makes the lives of programmers easier by eliminating the need for third-party package and build management systems like Gradle, Maven, make, and more. because it has a built-in build system and a package management system.
While Go is becoming the next favourite language among developers, it’s not like all developers and programmers are happy with it. For example, comparing the Go with the C family, a reddit user said, “Golang is the definition of reinventing the wheel, especially c/c++. I hate it when it’s gaining popularity just for performance’s sake. You might as well start going back using c++ or even go straight with assembly”.
Problems with Go(llum)
The main selling point of Go—which is its simplicity—is also the main complaint that several developers have. Some developers believe that its interface is too simple to solve the complex problem, or as Mikhail Raevskiy believes: sometimes a complex tool is required to address or even express complex problems. Raevskiy believes that, although complexity and ambiguity are not the finest qualities of a programming language, there is a sweet spot where attractive abstractions that are simple to use and understand can be made.
Another significant problem faced with Go is its lack of built-in libraries; it has a minimal set of built-in libraries and relies on the community to create an ecosystem of additional libraries. However, many developers consider that it might be challenging to obtain the necessary libraries and that sometimes, in order to use even basic ‘collections’ data structures, the programmer must create something on their own which, again, is a time-consuming process.
Additionally, while the Go tools allow users to install different libraries, they face the problem of version management. According to Sergei Peshkov, anyone attempting to use the programme after the library maintainer makes some backwards-incompatible changes and uploads it to GitHub will encounter an error because Go does nothing more than git clone your repository into a library folder. “Also, if the library is not installed, the program will not compile because of that,” said Peshkov.
Furthermore, since Go does not have its very extensive third-party library base, it ultimately does not have some basic data structures like ordered-map, sets, and more. Without a third-party library, a developer would have to construct their own ordered-map in order to hold various values at different times.
Lack of expression
Since Go is a programming language, it has to prioritise simplicity by omitting certain constructs that are commonly found in other languages. However, this design choice can lead to verbose code that is more challenging to read and comprehend.
The lack of shorthand in Go then requires developers to either write lengthy code to complete a task or to find a way to accomplish it with minimal code, which can hinder readability and make it difficult for others to interpret the code written by someone else.
Thus, when a developer tries to solve a simple problem, Golang’s lack of certain constructs forces it to write larger—and thereby more complex—codes, while solving a simple problem which Dlang, another major programming language with static typing, is able to do in just a couple of lines.
In case the developer is working with a large project containing a huge code base, where object-oriented capabilities are heavily required, the maintainability of code becomes a considerable problem.
However, with all the problems, one thing that sets apart Go from other programming languages is the Go runtime, which is a software stack that is used to execute Go code along with managing the execution of the Go programmes while providing the necessary resources and services to run them.
But, not everyone is a fan. A reddit user explains that, “I find the Go language outright horrible, but the runtime is solid, the concurrency support is stellar, getting native binaries directly is awesome. I’d kill for a Scala/Haskell like language that had all the goodies of the Go runtime and none of the disappointing coating.”