Go 1.16 is not yet released. These are work-in-progress release notes. Go 1.16 is expected to be released in February 2021.
TODO
TODO
TODO
retract
directives may now be used in a go.mod
file
to indicate that certain published versions of the module should not be used
by other modules. A module author may retract a version after a severe problem
is discovered or if the version was published unintentionally.
TODO: write and link to section in golang.org/ref/mod
TODO: write and link to tutorial or blog post
When using go test
, a test that
calls os.Exit(0)
during execution of a test function
will now be considered to fail.
This will help catch cases in which a test calls code that calls
os.Exit(0) and thereby stops running all future tests.
If a TestMain
function calls os.Exit(0)
that is still considered to be a passing test.
all
pattern
When the main module's go.mod
file
declares go
1.16
or higher, the all
package pattern now matches only those packages that are transitively imported
by a package or test found in the main module. (Packages imported by tests
of packages imported by the main module are no longer included.) This is
the same set of packages retained
by go
mod
vendor
since Go 1.11.
TODO
TODO
TODO
This release includes additional improvements to the Go linker, reducing linker resource usage (both time and memory) and improving code robustness/maintainability. These changes form the second half of a two-release project to modernize the Go linker.
The linker changes in 1.16 extend the 1.15 improvements to all
supported architecture/OS combinations (the 1.15 performance improvements
were primarily focused on ELF
-based OSes and
amd64
architectures). For a representative set of
large Go programs, linking is 20-35% faster than 1.15 and requires
5-15% less memory on average for linux/amd64
, with larger
improvements for other architectures and OSes.
TODO: update with final numbers later in the release.
TODO
The case of I/O on a closed network connection, or I/O on a network
connection that is closed before any of the I/O completes, can now
be detected using the new ErrClosed error.
A typical use would be errors.Is(err, net.ErrClosed)
.
In earlier releases the only way to reliably detect this case was to
match the string returned by the Error
method
with "use of closed network connection"
.
A new CommentNode
was added to the parse tree. The Mode
field in the parse.Tree
enables access to it.
The unicode
package and associated
support throughout the system has been upgraded from Unicode 12.0.0 to
Unicode 13.0.0,
which adds 5,930 new characters, including four new scripts, and 55 new emoji.
Unicode 13.0.0 also designates plane 3 (U+30000-U+3FFFF) as the tertiary
ideographic plane.
As always, there are various minor changes and updates to the library, made with the Go 1 promise of compatibility in mind.
TODO
In the net/http
package, the
behavior of StripPrefix
has been changed to strip the prefix from the request URL's
RawPath
field in addition to its Path
field.
In past releases, only the Path
field was trimmed, and so if the
request URL contained any escaped characters the URL would be modified to
have mismatched Path
and RawPath
fields.
In Go 1.16, StripPrefix
trims both fields.
If there are escaped characters in the prefix part of the request URL the
handler serves a 404 instead of its previous behavior of invoking the
underlying handler with a mismatched Path
/RawPath
pair.
The net/http
package now rejects HTTP range requests
of the form "Range": "bytes=--N"
where "-N"
is a negative suffix length, for
example "Range": "bytes=--2"
. It now replies with a 416 "Range Not Satisfiable"
response.