Go 1.16: A Major Upgrade with Exciting New Features
The latest version of the Go programming language, Go 1.16, has arrived, bringing with it a plethora of long-awaited features and refinements. This significant upgrade marks a major milestone in the language’s evolution, and we’re excited to dive into some of the highlights.
Native Support for Apple Silicon
Go has always prioritized portability across different operating systems and architectures. With the release of Apple’s first 64-bit ARM Mac, the Go project has responded by adding native support for ARM Macs. This means you can now build and run Go programs natively on your M1 Mac, or target ARM Macs by setting the environmental variables GOOS=darwin and GOARCH=arm64 when building your binary.
Native Embedding of Static Assets
One of Go’s greatest strengths is its ability to distribute and execute compiled programs as a single dependency-free binary file. However, this advantage was somewhat offset when programs relied on static files such as HTML templates, database migration files, or web application assets. With Go 1.16, you can now natively include static files in a Go binary using the new embed package.
Module-Aware Mode by Default
The introduction of Go modules in Go 1.11 marked a significant shift away from GOPATH semantics for dependency management. With Go 1.16, module-aware mode is now enabled by default, regardless of whether a go.mod file is present in the current directory. This means you can take advantage of Go modules without having to set the GO111MODULE environment variable.
Package Authors Can Now Retract Old Versions
As of Go 1.16, package authors can mark older package versions as insecure or broken using a new retract directive in go.mod files. This allows for greater control over package versions and ensures that users are aware of potential issues.
The io/ioutil Package is Now Deprecated
The entire ioutil package has been deprecated in Go 1.16, with its functions moved to other packages. While existing code using this package will continue to work, it’s encouraged to migrate to the new definitions in the io and os packages.
Improvements to the Go Standard Library
Go 1.16 also brings improvements to the Go standard library, including the addition of the io/fs and testing/testfs packages. These new packages make it easier to abstract a filesystem in tests, making them more easily reproducible regardless of the operating system they’re running on.
Notable Mentions
Other notable changes in Go 1.16 include updates to the vet tool, which now provides warnings for invalid calls to testing.T or testing.B methods from within a goroutine created during a test or benchmark. Additionally, there were several minor updates and fixes to standard library packages.
Get Started with Go 1.16
If you’re eager to explore the full list of bug fixes and features included in this release, check out the list of closed issues in the Go 1.16 milestone on GitHub. Happy coding!