Last year has been a pretty busy and productive year for Golang creators team. Notably, in August 2018 they released Golang 1.11.
A new version has many improvements to the toolchain, runtime, and libraries comparing to previous Golang 1.10 release. But most significant changes, that will surely please Golang developers are modules and WebAssembly support. Let’s take a closer look at what else is prepared in Go 1.11.
A new Golang version introduces a new concept, called “modules,” and provides developers with support for this concept. Modules are, basically, an alternative to GOPATH. By using modules, Golang developers don’t have to cope with GOPATH any more. Instead, now they get a lightweight, more reliable, and reproducible version dependency information.
As for support, modules allow maintaining the traditional mechanisms based on GOPATH. Besides, there is integrated support for versioning and package distribution. Though this concept still has a few rough edges and needs improvements, Go community seems to adopt modules gladly. Go creators, in turn, encourage the community to contribute and report bugs.
Added an experimental port to WebAssembly
Another change in Go 1.11 is adding to WebAssembly (js/wasm) an experimental port. This addition now helps Go developers reach better compatibility across major web browsers.
Improved testing and debugging
One more update worth mentioning is improved debugging. Specifically, now the compiler provides more accurate information. Like for instance, a number of lines, variable location data, and breakpoint locations. Better debugging is especially relevant for binaries.
Also, there are changes in testing. Mostly, they are fixed issues from previous Go 1.10 release. For instance, Go 1.11 compiler now won’t accept unused variables inside a closure or run tests that do not typecheck. So, Golang developers get better testing and correct reporting.
There are several improvements related to runtime. For one, it’s using sparse heap layout. This change enables Go developers to extend a limit of the Go heap’s size. Also, it helps solve rare failures like “address space conflict.”
Second, runtime update relates to macOS and iOS. The need for direct calling for the kernel is now replaced by libSystem.dylib. This replacement makes Go binaries more compatible with future versions of macOS and iOS.
Last but not least change relates to new trace package’s user annotation API. The new trace package allows users to record application-level information and group it into related traces. As a result, all this data now can be visualized and be used for analysis.
Changes in the core library and better performance
Basically, transformations and optimizations in Go 1.11 core library aren’t significant. Yet, all the updates are made for better of compatibility. And – for performance.
Go creators find it difficult to state specific updates regarding performance sharply. But what they surely promise is that Go developers can now run programs faster — generally, all due to standard library optimization and better-generated code.
Roadmap for 2019
Much has been done, but the best is yet to come. Go creators have already outlined their plans for 2019. They are planning to work on with minor improvements and bug fixes to release the next Go 1.12 version by next February. Also, big ideas and changes are scheduled for August 2019, when global Go community will welcome version Go 1.13.
Are you working on a mobile or web Golang project? We’d be glad to become your pair of extra hands and bring to the table our Golang expertise. Just drop us a line with a request whatever it may be, and we’ll get back to provide any relevant support.