We keep publishing excerpts from the experts discussions about the most important IT trends. These meetings were held by *instinctools as part of the Techpora project, and one of the conversations was about the Go programming language development. Is it right to consider Go a promising language and what has changed in it and the ecosystem lately?

Photo: instinctools.eu

These and other questions were answered by Alexey Palazhchenko – an experienced Gopher, workshops and the Golang Show podcast host, Ilya Danilkin – Team Leader, Golang Developer & Android enthusiast, Oleg Kovalev – Senior Software Engineer, GenericTalks podcast host, Sergey Novatsky – Lead Developer and Go expertise curator at *instinctools

“Go is a fairly young language, however, its tooling is changing rapidly”

In comparison with Java, I would say that Go is a rather young language. It has recently turned 15 years old. Therefore, it can’t be said that it has changed radically and that there is legacy, as in Java, and everything needs to be rewritten for new streams. But at the same time, tooling is changing rapidly, despite the fact that the language itself remains stable. And if you now take any program written in Go 1.0, then, of course, you will assemble it. But in some cases it will be difficult to start compilation, not to mention integration with the C language and so on.

Alexey Palazhchenko:

Even the language style has changed. What we considered normal patterns in 1.6 or 1.5 nowadays is perceived as somewhat crazy. From the dependencies implementation from vendors, we slowly moved to other solutions. Normal IDE appeared. The language has grown up and evolved, so to speak. Speaking about the latest releases, I would single out a normal, official modules release.

Ilya Danilkin:
Photo: Google.com

There will be major changes in the language itself in the next release. Until then, preparations are underway. The biggest change is that the Go test can finally output JSON. There have also been improvements in the testing framework. Currently, creating temporary directories has become possible. But these are still trifles that speak about the Go language stability and its conservatism, right up to the next release.

Alexey Palazhchenko:

“Go hasn’t changed so much that you have to make LTS”

Each major Go version is supported for exactly one year. And it is not clear why there are no long-term LTS versions. Doesn’t this close the way to the corporate market segment ? Maybe Go would find more use in the enterprise with long-term support?

Sergey Novatsky:

The major Go version is Go 1. All that is being released now are minor versions. And this largely explains why there is no LTS. And I’m not sure that the version is only supported for a year. Yes, the current and previous language versions are officially supported. But there are still cases when there is support for older versions. Incidentally, regarding LTS, there has recently been an initiative to create an LTS for improving the Go usage in the enterprise sector. And everyone downvoted this initiative, as Go is already used in the enterprise and, according to their opinion, there is no need to form a community to divide it into two parts: Java 8 and Java 17 users. And in general, we have the LTS release – Go 1. After this release, the language is stable. Yes, tooling is changing, so there may be difficulties with starting the compilation. But in any case, the source code can be compiled.

Alexey Palazhchenko:

The language hasn’t changed so much that you have to make LTS. The fact that fixes for CVE are not released or rarely released for older versions is a problem. However, it encourages to upgrade to at least the latest, currently supported version. I’ve worked for several different companies that used Go as their primary language.

Ilya Danilkin:

“Go doesn’t take root well on mobile devices”

Initially, Go was positioned as a language for system programming. Nevertheless, what Go authors had in mind about this was not what the whole world thought about Go. The authors claimed to have written a language for “systems programming”. The developers were surprised, however, later it turned out that Google called systems programming a language for developing systems. AS a result, Go is a language for developing large, distributed, fault-tolerant systems. But again, Go is changing, and currently we start writing entire operating systems in this language. And we do it without major issues. Nevertheless, Go doesn’t take root well on mobile devices, although native Go implementations have already been appearing. Now the prospects for using Go on microcomputers are much higher than on mobile devices. Surely, I believe that the Raspberry Pi is no longer a microcomputer. I just have the latest Raspberry Pi running Kubernetes. It is such a monster that it is more powerful than my computer that I had a few years ago. And even if taking a minimal Raspberry Pi, for example, the Raspberry Pi Zero, Go still works well there.

Alexey Palazhchenko:
Photo: digitaltrends.com

“Everyone thought Go would be the C++ killer”

In fact, when the language first appeared in 2007-2008, everyone told that the language authors suffered from the fact that C ++ would be used in the future. And everyone thought that Go would be a C++ killer, since Google is almost all written in C++, and the new language authors mentioned this. However, as practice has shown, more Python, Perl and Ruby script developers have moved to Go. As a result, C ++ remained in place, since the language is difficult to replace due to its capabilities. And Go use has moved more into the web. Another reason for the Go boom is the standard packages presence with HTTP and TCP servers implementations. Any HTTP server can be written, since there is almost everything for this. Maybe there is no router, but there are 30 versions on GitHub and there was always an opportunity to choose something better. Recently, an article was published on how to choose a routing for your project, and there was a whole selection scheme.

Oleg Kovalev:

“Go has had generics for a long time”

Go has had generics for a long time, and 90% of what is complex in other languages can be done with them. Generics are an interface and a set of methods: take a function that accepts an interface, and slip anything into it. But there are no methods on base types in the language. It is impossible to take and write some kind of universal container or map that preserves the elements insertion order. Next, we have several options. The first one is to copy and edit the same implementation 20 times, for all base types. The second is to wrap it in an interface and wrap and unwrap each time you insert an element from the collection. This is less efficient at runtime, indeed, but there is no need for writing an implementation. And there is the third option using generics, when everything slows down in the compiler, however, it will be effective at runtime. Generics are not only beautiful, but also affect performance. Undoubtedly, all mechanisms affect performance in one way or another, and either it is developers productivity, or the compiler and runtime performance. The current generics specification does not dictate implementation. Purely technically, it is possible to make such generics that will work completely at runtime. However, the current implementation is all in the compiler.

Alexey Palazhchenko:
Photo: https://www.geeksforgeeks.org

“Converting Python to Go is not exactly the right logic”

I would give the following advice to Go newcomers: you need to know three folders. The first one is “cmd”, where the file should be located that literally says the following: “The main is here, I will do something – and it will start”. Then there should be a folder where “something will start”. I went against the system and called it “app”, or “application”. And the third folder is “pkg”, all packages that have nothing to do with business logic, but are still useful. I described the minimum that you need to have in the project and with which you can start. Then, as the project grows, you will guess yourself what is missing. You have to start small, there are many projects where people have moved from Python, Ruby and Java and applied the experience of another language. And they believed that Go language is too complex as there is a lot of code, interfaces, and it is not always clear why this is needed. And here you need to understand that converting Python to Go is not quite the right logic. It is better to take a step back, start with an easier one, and then gain experience.

Oleg Kovalev:

Go moves forward, beating competitors like Python and Java

The language is becoming more mature. Many companies specialize in it, the community is growing, the number of vacancies is increasing. The language has demonstrated that with even one kind of cycle and without generics building huge businesses, sizable teams and fascinating projects is possible. Everything goes to the fact that the language keeps going on a well-trodden path, knocking down competitors like Python and Java. Surely, the competition is not so fierce, as the languages mentioned before are developing too, there are new vacancies and projects.

Oleg Kovalev:

There will be more simple and basic Go projects in the future. Where people used to use PHP as the most massive language, now there will be Go. The Go language is expected to “eat” the bread of both Java and PHP. Speaking about the threat to Go from Rust, then their intersection is extremely small.

Alexey Palazhchenko:

Related job openings

We are looking for a Senior Java Developer to join our team.

#Remote#Backend#Full Stack#Java

*instinctools is looking for a Java Developer for one of our clients.

#Remote#Backend#Java

Our team is looking for an experienced Full Stack (React + Python) Developer for one of our clients.

#Remote#Full Stack#Python#React

Our team is looking for a Data Engineer developer for one of our clients.

#Office#Remote#Architect#Backend#Data Engineering#Java#Python
Volha Abukhouskaya
Volha Abukhouskaya Recruiter
We will be glad to see you in our team!

    * Full Name

    * E-mail

    * Job Vacancy

    Additional Information (LinkedIn, Github, etc.)