Go has been quite good about their regular update schedule. There’s a new release every six months, like clockwork. Go 1.12 promises a number of runtime performance improvements, minor tool depreciations, improved module support, and absolutely no language specification changes. As always, this release complies with Go’s fundamental promise of backwards compatibility.
Let’s dive right in and see what’s in store for developers!
Go 1.12
Runtime improvements
Let’s start with the good stuff: Go 1.12 significantly improves runtime performance. This release reduces allocation latency immediately after garbage collection by sweeping when a large fraction of the heap remains live. For larger allocations that can’t reuse existing heap space, Go 1.12 releases memory back to the OS more aggressively.
The runtime timer and deadline code has been modified to scale nicely with more CPUs to improve network connection deadlines.
Memory-wise, the Go 1.12 release fixed the over counting of large heap allocations, improving the accuracy of memory profiles. For Linux, Go uses MADV_FREE
to release unused memory for efficiency’s sake. However, although this does occasionally result in a higher reported RSS, the kernel reclaims unused data when necessary.
SEE ALSO: Going serverless with Google Cloud Functions and Go 1.11
Tools
Please note: Go 1.12 is the last release that will support binary-only packages. There are a few changes here, including a couple tools that have been depreciated.
Let’s go through the list!
go tool vet
is no longer supported, since thego vet
command has been rewritten to serve as the base for a range of different source code analysis tools. More information is available here.- The Go tour is no longer included in the main binary distribution.
- Build cache is now required, since Go plans to gradually eliminate the
$GOPATH/pkg
. godoc
no longer has a command-line interface and is only a web server. Users should usego doc
for command-line help output instead.
It’s been six months since the Go modules finally landed. There are a few changes here as well. When the GO111MODULE
is activated, the go
command supports module-aware operations outside of a module directory. Commands such as go get
, go list
, and go mod
download behave as if in a module. Also, go commands that download and extract modules are safe to invoke concurrently.
As for the compiler toolchain, the compiler’s live variable analysis has improved. As a result, finalizers can be executed sooner than in older releases. More functions are eligible for inlining by default. Be careful and use runtime.CallersFrames
instead of iterating over the result of runtime.Callers
directly.
Additionally, the compiler now accepts a -lang
flag to set the Go language version to use. This release also uses different conventions to call Go functions and assembly functions, although this should be invisible to users.
SEE ALSO: Go 1.11: What the new modules in Go are all about
Core library changes
Minor changes and updates here, mostly with backwards compatibility in mind. Check out the full list for all the details of what’s in and what’s out.
The Go 1.12 release adds opt-in support for TLS 1.3. All the TLS 1.2 features are available in TLS 1.3, except now there is better security and performance metrics. Take a look at all the changes here!
Getting Go 1.12
Want to upgrade? We don’t blame you; Golang is a very useful language to know and use.
The latest version of Go is available here. See the release notes for more information about the changes in Go 1.12.
The post Go 1.12 is a go for runtime improvements, module support, and more! appeared first on JAXenter.
Source : JAXenter