Paul Krill
Editor at Large

Go 1.16 arrives with library, runtime enhancements

news
Feb 17, 20213 mins

Forthcoming update to the Google-created open source programming language also introduces support for Apple Silicon.

hyper convergence speed burning rubber tire binary fast by tao55 getty images
Credit: Toa55 / Getty Images

Go 1.16, the latest upgrade to the Google-developed open source programming language, has arrived in a stable production release, with core library and runtime improvements anchoring a host of new capabilities. There are no changes to the language itself.

Changes to the core library in Go 1.16 include the new embed package, which offers access to files embedded in the program during compilation, via the //go:embed directive. Minor changes and updates have been made to the library as well. Changes range from the deprecation of crypto/dsa to upgrading the unicode package to Unicode 13.0.0.

The core library also gains file systems enhancements. A new io/fs package defines an abstraction for read-only trees of files, the fs.FS interface, and standard library packages have been adapted to make use of the interface when appropriate. On the producer side of the interface, the new embed.FS type implements fs.FS as does zip.Reader. A new os.DirFS function provides an implementation of fs.FS backed by a tree of operating system files. On the consumer side, a new http.FS function converts an fs.FS to an http.Handler. And the html.template and text/template packages’ ParseFS functions and methods read templates from fs.FS. To test code implementing fs.FS, a new testing/fstest package provides a TestFS function to report common mistakes. It also provides a simple in-memory file system implementation, MapFS, for testing code that accepts fs.FS implementations.

Go 1.16 also brings improvements to the runtime. A new runtime/metrics package introduces a stable interface for reading implementation-defined metrics. On Linux, the Go runtime now defaults to releasing memory to the operating system promptly, rather than lazily when the OS is under memory pressure. Go 1.16 also fixes a discrepancy between the race detector and the Go memory model. The detector now more precisely follows the channel synchronization rules of the memory model. Thus the detector now may report races that previously had been missed.

The release of the first beta was announced on December 17. Go 1.16 is due as a production release in February 2021. The current Go 1.15 release line arrived in August. Binary and source distribution files for Go 1.16 can be downloaded from golang.org.

Other changes cited in the Go 1.16 release notes include:

  • Builds run faster and use less memory.
  • The 64-bit ARM architecture on MacOS, also known as Apple Silicon, is supported, with G00S=darwin, GOARCH=arm64. An ios/amd64 port has been added, targeting the iOS simulator running on AMD64-based MacOS.
  • The compiler now can inline functions with non-labeled for loops, method values, and type switches. The inliner also can detect more inlining calls when inlining is a possibility.
  • Improvements to the linker reduce resource usage and improve code maintainability. This is part of a plan to modernize the linker.
  • Module-aware mode is enabled by default.
  • The go command now supports inclusion of static files and file trees as part of the final executable, via the new //go:embed directive.
  • The new GOVCS environment variable limits which version control tools the go command may use to download source code. This mitigates security issues with tools typically used in trusted, authenticated environments.
  • Go 1.16 is the last release that will run on MacOS Sierra. Go 1.17 will require MacOS 10.13 High Sierra or later.
Paul Krill

Paul Krill is editor at large at InfoWorld. Paul has been covering computer technology as a news and feature reporter for more than 35 years, including 30 years at InfoWorld. He has specialized in coverage of software development tools and technologies since the 1990s, and he continues to lead InfoWorld’s news coverage of software development platforms including Java and .NET and programming languages including JavaScript, TypeScript, PHP, Python, Ruby, Rust, and Go. Long trusted as a reporter who prioritizes accuracy, integrity, and the best interests of readers, Paul is sought out by technology companies and industry organizations who want to reach InfoWorld’s audience of software developers and other information technology professionals. Paul has won a “Best Technology News Coverage” award from IDG.

More from this author