Posts Tagged ‘Go Programming language’
Go was created in 2007 at Google as an experimental project. It was designed to be a fun language and at the same time it is productive, practical, expressive and powerful. Google Go can be considered the result of a rather conservative language evolution from languages such as C and C++.
Recently, there have been criticisms about the value of using Node.js in a high-performance, networked application environment, and some developers have moved to the Go language. Not only developers but also some well-known companies, such as Google, DropBox, Docker, DigitalOcean and more have picked up Go for some of their projects.
Certainly, Node.js is still used by a much wider audience, has more modules, is easier to use and isn’t going anywhere anytime soon. However, Go is gaining more and more popularity. In this article we will take a look at the differences between Node.js and Go to reveal the strengths and weaknesses of each environment.
Due to JS’s dynamically-typed nature Node cannot reach the raw performance of CPU or memory bound tasks that Go can achieve in many tests. Go is about 3 times faster and more lightweight than Node.js in a production environment. Not to say that Node.js is slow, it’s fast enough for most use cases, but when you do hit a limit, Go can still go a long way.
One of the language’s peculiarities is the presence of goroutines, functions that can be executed concurrently with one another.
These can be launched simply by using a keyword. Go runtime contains a scheduler that coordinates the execution of an arbitrary number of goroutines on an arbitrary number of system threads (the M:N model). In this way it is possible to carry out rapid context switches in order to take advantage of all CPU cores. So, in a hypothetical web application written in Go a single process will be able to continue serving requests even if one of these is trying to execute a blocked operation.
Ease of use
Node.js is a much simpler platform to use, especially if you are already a JS developer. For Go you will need to learn some new programming concepts, such as: coroutines, channels, strict typing (with compilation), interfaces, structs, pointers, and some other differences.
Both platforms have pretty active and growing ecosystems, but as Node.js has been around much longer and certainly it has a broader community of users and more tools that make certain software projects a lot easier and/or cheaper to implement.
Go is a younger language, however, it dynamically develops: the number of standard Go packages is growing steadily, currently at over 100, and the Go community packages can be searched easily.
In conclusion, I’d like to say that there is no ideal language/framework/tool that could be used by everyone otherwise there would be only one programming language and there wouldn’t be such debates as Go vs Node.js:) Every language is tailored to be used for specific use cases. But we need to admit that there are some things Go performs better in, at the same time it lacks some characteristics that Node.js provides.
And what advantages and disadvantages of using Node.js and Go have you come across?
Business Development Manager
Professional Software Development
The Go Programming Language (Go) is an open-source programming language sponsored by Google and created by Robert Griesemer, Rob Pike, and Ken Thompson that makes it easy to build simple, reliable, and efficient software.
Go has gained popularity since it was first announced in 2009, and it’s now being used by many companies worldwide and for a variety of applications; Dropbox, Google, SoundCloud, CloudFlare, Docker and Cloud Foundry are some of the Go programming users.
Like any technology, though, it has its adherents and critics. Here are some key benefits and perceived drawbacks of the language as told by experts familiar with it.
- It is fast. And not only fast in the sense that programs written in it run fast when compared to other common languages; but also fast in the sense that its compiler can compile projects in the blink of an eye. You can even edit and run Go programs directly on the Web.
- It is a garbage-collected language. This puts less pressure on the developer to do memory management, as the language itself takes care of most of the grunt work needed.
- It has built-in concurrency, which allows parallelism in an easier way than is possible in other languages. Go has the concept of goroutines to start concurrent work and the concept of channels to permit both communication and synchronization.
- Go has documentation as a standard feature. That makes it easier for developers to document their code and generate human-readable data out of source code comments.
- Go has a rich standard library which covers a lot of areas. In fact, Go is probably the only language that can claim to have a fully working Web server as part of its standard library.
- Go’s built-in build system is both elegant and simple. No need to mess with build configurations or makefiles.
- Go is still a very young language and has a very young ecosystem. This means there aren’t many libraries for it yet, leaving developers to write libraries themselves. There is also a shortage of books and online courses on the language.
- Go is simple to the point of being superficial. Go’s simplicity is mostly superficial, and in its effort to find simplicity, it threw away decades of valuable programming language progress.
- Although Go is a high-level language, it still has low-level features such as pointer-arithmetic which does not rule out the chance of doing systems and OS programming.
- Go’s tooling is really weird, on the surface it has some really nice tools, but a lot of them, when you start using them, quickly show their limitations.
- It is still not so easy to learn Go and it’s difficult to handle errors in it.
What is your attitude to Go? Is it worth learning? What do you think are Go’s advantages and disadvantages? Can you tell us about a real use you have given to this programming language? Please, feel free to share your thoughts here below.
Business Development Manager
Professional Software Development