Go 1.11 is here: Modules and WebAssembly support are a go!
It’s only been six months since the last major Go update, but now Go 1.11 is here! Most of the changes are focused on runtime improvements and tweaks in the toolchain implementation. However, Go modules have finally landed. We take a look at everything included in this update.
It’s only been six months since the last major Go release, but that hasn’t stopped the Go development team. The big changes in this update are based on changes in the implementation of the toolchain, runtime, and libraries. However, as previously promised, modules have finally landed in Go, along with WebAssembly support. Let’s take a look and see what’s in store for developers in Go 1.11.
So, what’s changed in 1.11? Lots!
Toolchain improvements include more functions for inlining, like panic. It also supports column information in line directives.
The compiler has been upgraded to provide more accurate debug information, especially for optimized binaries. This includes data like variable location information, line numbers, and breakpoint locations. The compiler is scheduled for further improvements, so keep your ears open.
The runtime heap limit has been expanded. Previously, the limit was 512GiB. However, thanks to the new sparse heap layout, there is no limit. (This also gets rid of the “address space conflict” failures.)
In general, most programs should run faster thanks to optimizations in the core library. However, all of the changes to the standard library are fairly minor to maintain compatibility. Check out the release notes for more information.
Go 1.11 has added an experimental port for WebAssembly. WebAssembly is designed as a portable target for compilation of high-level languages like C/C++/Rust, enabling deployment on the web for client and server applications. Right now, developers can use .wasm for things like goroutine scheduling, garbage collection, maps, and more.
There are no changes to the language specification in Go 1.11.
SEE ALSO: Top 5 IDEs for Go
A Go module is a collection of packages sharing a common import path prefix, known as the module path. The module is the unit of versioning, and module versions are written as semantic version strings. When developing using Git, developers will define a new semantic version of a module by adding a tag to the module’s Git repository. Although semantic versions are strongly preferred, referring to specific commits will be supported as well.
Go modules are a chance to revamp in how the go command manages source code. Basically, it’s an alternative to GOPATH with support for versioning and package distribution.
Modules make version dependency information explicit yet lightweight. It’s easier than ever for developers to code reliable and reproducible builds.
However, modules are something of an experimental feature in Go 1.11. It is likely that developers run into errors; please make use of the issue tracker if you find any bugs!
Getting Go 1.11
As always, Go remains compatibility with all previous versions. Almost all Go programs should run and compile as usual. The latest version of Go is available here. See the release notes for more information about the changes in Go 1.11.