WHY SHOULD YOU LEARN GO (GOLANG)?
Recently, there is a rise in a new programming language: Go (Golang). And nothing is going to make a developer crazy than a new programming language, right? Thus, here we want to share with you about why you should also learn this new language. Of course, we are not going to teach you, how you can write “Hello World!!” in this article because there are lots of other articles online for that. We will discuss the current stage of computer hardware-software and why we need a new language like Go? As if there isn’t any problem, then we don’t need a solution, right?
Introduction to Go (Golang)
Go (Golang) is a programming language created at Google, by Google developers and other programmers. This programming language is free and open-source being maintained by Google. One of the founding members of Go is Ken Thompson best known for his work in Unix operating system development. Go compiler was initially written in C but now, it is written in Go itself, which makes it self-hosted.
So, what’s so special about Go (Golang)?
Statically typed compiled language.
Supports built-in concurrency model with the help of GoRoutines.
Built-in garbage collector and memory safety.
Go strings are UTF-8 encoded by default.
Simpler syntax compared to other programming languages.
Hardware limitations:
Moore’s law is failing.
Back in 2004, the first Pentium 4 processor with 3.0GHz clock speed was introduced by Intel. Nowadays, my Mackbook Pro 2016 has a clock speed of 2.9GHz. We all can see that, in nearly a decade, there is not too much improvement in the raw processing power. With the time in the below chart, you can see the comparison of increasing the processing power.
You are wrong if you are thinking that adding more transistors is the solution because at a smaller scale some quantum properties start to emerge. Besides, it actually costs more to put more transistors and the number of transistors you can add per dollar will start to fall.
For the solution of the above problems,
More and more cores to the processor are being added by manufacturers. Nowadays we have octa-core CPUs and quad-core available.
Hyper-threading is also introduced.
To increase the performance, added more cache to the processor.
However, those solutions have their own limitations. Adding more and more cache to the processor to increase performance is way not advisable since the cache has physical limits: the bigger the cache, the slower it gets. Adding more core to the processor has its cost too as it cannot scale to indefinitely. These multi-core processors can run multiple threads at the same time and that brings concurrency to the picture. We’ll discuss it later.
Therefore, the only way to go is more efficient software to increase the performance if we cannot rely on the hardware improvements. But unfortunately, a modern programming language is not much efficient.
Go (Golang) has goroutines!
As discussed above, hardware manufacturers are adding more and more cores to the processors with an intention to increase the performance. And we should expect an increase in the number of cores in the following years. Moreover, today’s applications using multiple microservices for maintaining database connections, maintain caches and message queues. Therefore, the software and the programming languages should support concurrency easily and should be scalable with an increased number of cores.
On the other hand, most of the modern programming languages are from the ’90s single-threaded environment. Most of those languages support multi-threading. However, the real problem making it harder to create a multi-threading application on those languages actually comes with coexisting execution, race conditions and deadlocks.
For instance, creating a new thread in Java is not memory efficient. As every thread consumes approximately 1MB of the memory heap size. Finally, if you start spinning thousands of threads, they will put tremendous pressure on the heap and will cause shut down because of out of memory. Besides, if you want to communicate between two or more threads, it’s very challenging.
Go (Golang) was released in 2009 when multi-core processors were already available. That is why Go is built with keeping concurrency in mind. It has goroutines instead of threads. They consume nearly 2KB memory from the heap. As a result, you can spin millions of goroutines at any time you want.
Other benefits are:
Growable segmented stacks which mean they will use more memory only when needed.
Faster startup time than threads.
Built-in primitives to communicate safely between channels.
Avoiding the must to resort to mutex locking when sharing data structures.
Run-on multiple threads as goroutines are multiplexed into a small number of OS threads.
All of these benefits make Go (Golang) very powerful to handle concurrency like Java, C or C++ while keeping concurrency execution code straight and beautiful like Erlang.
Go (Golang) takes good of both the worlds.
Go (Golang) runs directly on the underlying hardware.
One most great benefit of using C, C++ over other modern higher-level languages is their performance as C/C++ are compiled and not interpreted.
Like lower-level languages like C/C++, Go (Golang) is also a compiled language meaning performance is almost nearer to lower-level languages. It also uses garbage collection to allocate and remove the object.
The code is written in Go (Golang) is easy to maintain.
Go does not have crazy programming syntax like other languages do. It actually has a very neat and clean syntax.
The designers of the Go had this thing in mind when they were creating the language. That is code should be simple for other developers to understand and each segment of code should have minimum side effects on another segment. It will make the code easy to modify and maintain.
Go (Golang) intentionally leaves out several features of modern OOP languages.
No classes. Everything is divided into packages only. Go has only structs instead of classes.
It does not support inheritance. This feature will make the code easy to modify. By removing inheritance, Go makes it easier to understand the code.
No constructors.
No annotations.
No generics.
No exceptions.
The above features make Go very special from other languages. Unlike other new languages like Swift, the Go syntax is very stable. It remained the same since the initial public release 1.0, which makes it backward compatible.
Go is backed by Google.
This is not a direct technical advantage. However, Go is designed and supported by Google - one of the largest cloud infrastructures in the world.
More than that, Go is also used by some big companies like BBC, IBM, Adobe, Intel and even Medium.
Conclusion:
Even if Go is very different from other object-oriented languages, it is still the same beast providing you super-efficient concurrency handling like Java, high performance like C/C++, and fun to code like Python/Perl. The developer needs to understand the hardware and make their program optimize appropriately. And the optimized software can run on cheaper and slower hardware and overall better impact on end-user experience.
Collective Sources
---
JT1 - IT Recruitment Agency
Email: hi@jt1.vn
Phone: +8428 6675 6685
Website: http://www.jt1.asia
Blog: http://www.jt1.asia/blog
Facebook: https://www.facebook.com/jt1asia