mirror of
https://github.com/golang/go
synced 2024-11-18 10:34:51 -07:00
84baf4162a
For #37419 For #38053 Change-Id: I206f360ff4957bc7edc3c35dfc814b7bd5ec440c Reviewed-on: https://go-review.googlesource.com/c/go/+/237739 Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
940 lines
36 KiB
HTML
940 lines
36 KiB
HTML
<!--{
|
|
"Title": "Go 1.15 Release Notes",
|
|
"Path": "/doc/go1.15"
|
|
}-->
|
|
|
|
<!--
|
|
NOTE: In this document and others in this directory, the convention is to
|
|
set fixed-width phrases with non-fixed-width spaces, as in
|
|
<code>hello</code> <code>world</code>.
|
|
Do not send CLs removing the interior tags from such phrases.
|
|
-->
|
|
|
|
<style>
|
|
main ul li { margin: 0.5em 0; }
|
|
</style>
|
|
|
|
<h2 id="introduction">DRAFT RELEASE NOTES — Introduction to Go 1.15</h2>
|
|
|
|
<p>
|
|
<strong>
|
|
Go 1.15 is not yet released. These are work-in-progress
|
|
release notes. Go 1.15 is expected to be released in August 2020.
|
|
</strong>
|
|
</p>
|
|
|
|
<h2 id="language">Changes to the language</h2>
|
|
|
|
<p>
|
|
There are no changes to the language.
|
|
</p>
|
|
|
|
<h2 id="ports">Ports</h2>
|
|
|
|
<h3 id="darwin">Darwin</h3>
|
|
|
|
<p>
|
|
As <a href="go1.14#darwin">announced</a> in the Go 1.14 release notes,
|
|
Go 1.15 now requires macOS 10.12 Sierra or later;
|
|
support for previous versions has been discontinued.
|
|
</p>
|
|
|
|
<p> <!-- golang.org/issue/37610, golang.org/issue/37611, CL 227582, and CL 227198 -->
|
|
As <a href="/doc/go1.14#darwin">announced</a> in the Go 1.14 release
|
|
notes, Go 1.15 drops support for 32-bit binaries on macOS, iOS,
|
|
iPadOS, watchOS, and tvOS (the <code>darwin/386</code>
|
|
and <code>darwin/arm</code> ports). Go continues to support the
|
|
64-bit <code>darwin/amd64</code> and <code>darwin/arm64</code> ports.
|
|
</p>
|
|
|
|
<h3 id="windows">Windows</h3>
|
|
|
|
<p> <!-- CL 214397 and CL 230217 -->
|
|
Go 1.15 now generates Windows ASLR executables when <code>-buildmode=pie</code>
|
|
cmd/link flag is provided. Go command uses <code>-buildmode=pie</code> by default
|
|
on Windows.
|
|
</p>
|
|
|
|
<p><!-- CL 227003 -->
|
|
The <code>-race</code> and <code>-msan</code> flags now always
|
|
enable <code>-d=checkptr</code>, which checks uses
|
|
of <code>unsafe.Pointer</code>. This was previously the case on all
|
|
OSes except Windows.
|
|
</p>
|
|
|
|
<p><!-- CL 211139 -->
|
|
Go-built DLLs no longer cause the process to exit when it receives a
|
|
signal (such as Ctrl-C at a terminal).
|
|
</p>
|
|
|
|
<h3 id="android">Android</h3>
|
|
|
|
<p> <!-- CL 235017, golang.org/issue/38838 -->
|
|
When linking binaries for Android, Go 1.15 explicitly selects
|
|
the <code>lld</code> linker available in recent versions of the NDK.
|
|
The <code>lld</code> linker avoids crashes on some devices, and is
|
|
planned to become the default NDK linker in a future NDK version.
|
|
</p>
|
|
|
|
<h3 id="openbsd">OpenBSD</h3>
|
|
|
|
<p><!-- CL 234381 -->
|
|
Go 1.15 adds support for OpenBSD 6.7 on <code>GOARCH=arm</code>
|
|
and <code>GOARCH=arm64</code>. Previous versions of Go already
|
|
supported OpenBSD 6.7 on <code>GOARCH=386</code>
|
|
and <code>GOARCH=amd64</code>.
|
|
</p>
|
|
|
|
<h3 id="riscv">RISC-V</h3>
|
|
|
|
<p> <!-- CL 226400, CL 226206, and others -->
|
|
There has been progress in improving the stability and performance
|
|
of the 64-bit RISC-V port on Linux (<code>GOOS=linux</code>,
|
|
<code>GOARCH=riscv64</code>). It also now supports asynchronous
|
|
preemption.
|
|
</p>
|
|
|
|
<h2 id="tools">Tools</h2>
|
|
|
|
<h3 id="go-command">Go command</h3>
|
|
|
|
<p><!-- golang.org/issue/37367 -->
|
|
The <code>GOPROXY</code> environment variable now supports skipping proxies
|
|
that return errors. Proxy URLs may now be separated with either commas
|
|
(<code>,</code>) or pipe characters (<code>|</code>). If a proxy URL is
|
|
followed by a comma, the <code>go</code> command will only try the next proxy
|
|
in the list after a 404 or 410 HTTP response. If a proxy URL is followed by a
|
|
pipe character, the <code>go</code> command will try the next proxy in the
|
|
list after any error. Note that the default value of <code>GOPROXY</code>
|
|
remains <code>https://proxy.golang.org,direct</code>, which does not fall
|
|
back to <code>direct</code> in case of errors.
|
|
</p>
|
|
|
|
<h4 id="go-test"><code>go</code> <code>test</code></h4>
|
|
|
|
<p><!-- https://golang.org/issue/36134 -->
|
|
Changing the <code>-timeout</code> flag now invalidates cached test results. A
|
|
cached result for a test run with a long timeout will no longer count as
|
|
passing when <code>go</code> <code>test</code> is re-invoked with a short one.
|
|
</p>
|
|
|
|
<h4 id="go-flag-parsing">Flag parsing</h4>
|
|
|
|
<p><!-- https://golang.org/cl/211358 -->
|
|
Various flag parsing issues in <code>go</code> <code>test</code> and
|
|
<code>go</code> <code>vet</code> have been fixed. Notably, flags specified
|
|
in <code>GOFLAGS</code> are handled more consistently, and
|
|
the <code>-outputdir</code> flag now interprets relative paths relative to the
|
|
working directory of the <code>go</code> command (rather than the working
|
|
directory of each individual test).
|
|
</p>
|
|
|
|
<h4 id="module-cache">Module cache</h4>
|
|
|
|
<p><!-- https://golang.org/cl/219538 -->
|
|
The location of the module cache may now be set with
|
|
the <code>GOMODCACHE</code> environment variable. The default value of
|
|
<code>GOMODCACHE</code> is <code>GOPATH[0]/pkg/mod</code>, the location of the
|
|
module cache before this change.
|
|
</p>
|
|
|
|
<p><!-- https://golang.org/cl/221157 -->
|
|
A workaround is now available for Windows "Access is denied" errors in
|
|
<code>go</code> commands that access the module cache, caused by external
|
|
programs concurrently scanning the file system (see
|
|
<a href="https://golang.org/issue/36568">issue #36568</a>). The workaround is
|
|
not enabled by default because it is not safe to use when Go versions lower
|
|
than 1.14.2 and 1.13.10 are running concurrently with the same module cache.
|
|
It can be enabled by explicitly setting the environment variable
|
|
<code>GODEBUG=modcacheunzipinplace=1</code>.
|
|
</p>
|
|
|
|
<h3 id="vet">Vet</h3>
|
|
|
|
<h4 id="vet-string-int">New warning for string(x)</h4>
|
|
|
|
<p><!-- CL 212919, 232660 -->
|
|
The vet tool now warns about conversions of the
|
|
form <code>string(x)</code> where <code>x</code> has an integer type
|
|
other than <code>rune</code> or <code>byte</code>.
|
|
Experience with Go has shown that many conversions of this form
|
|
erroneously assume that <code>string(x)</code> evaluates to the
|
|
string representation of the integer <code>x</code>.
|
|
It actually evaluates to a string containing the UTF-8 encoding of
|
|
the value of <code>x</code>.
|
|
For example, <code>string(9786)</code> does not evaluate to the
|
|
string <code>"9786"</code>; it evaluates to the
|
|
string <code>"\xe2\x98\xba"</code>, or <code>"☺"</code>.
|
|
</p>
|
|
|
|
<p>
|
|
Code that is using <code>string(x)</code> correctly can be rewritten
|
|
to <code>string(rune(x))</code>.
|
|
Or, in some cases, calling <code>utf8.EncodeRune(buf, x)</code> with
|
|
a suitable byte slice <code>buf</code> may be the right solution.
|
|
Other code should most likely use <code>strconv.Itoa</code>
|
|
or <code>fmt.Sprint</code>.
|
|
</p>
|
|
|
|
<p>
|
|
This new vet check is enabled by default when using <code>go test</code>.
|
|
</p>
|
|
|
|
<p>
|
|
We are considering prohibiting the conversion in a future release of Go.
|
|
That is, the language would change to only
|
|
permit <code>string(x)</code> for integer <code>x</code> when the
|
|
type of <code>x</code> is <code>rune</code> or <code>byte</code>.
|
|
Such a language change would not be backward compatible.
|
|
We are using this vet check as a first trial step toward changing
|
|
the language.
|
|
</p>
|
|
|
|
<h4 id="vet-impossible-interface">New warning for impossible interface conversions</h4>
|
|
|
|
<p><!-- CL 218779, 232660 -->
|
|
The vet tool now warns about type assertions from one interface type
|
|
to another interface type when the type assertion will always fail.
|
|
This will happen if both interface types implement a method with the
|
|
same name but with a different type signature.
|
|
</p>
|
|
|
|
<p>
|
|
There is no reason to write a type assertion that always fails, so
|
|
any code that triggers this vet check should be rewritten.
|
|
</p>
|
|
|
|
<p>
|
|
This new vet check is enabled by default when using <code>go test</code>.
|
|
</p>
|
|
|
|
<p>
|
|
We are considering prohibiting impossible interface type assertions
|
|
in a future release of Go.
|
|
Such a language change would not be backward compatible.
|
|
We are using this vet check as a first trial step toward changing
|
|
the language.
|
|
</p>
|
|
|
|
<h2 id="runtime">Runtime</h2>
|
|
|
|
<p><!-- CL 221779 -->
|
|
If <code>panic</code> is invoked with a value whose type is derived from any
|
|
of: <code>bool</code>, <code>complex64</code>, <code>complex128</code>, <code>float32</code>, <code>float64</code>,
|
|
<code>int</code>, <code>int8</code>, <code>int16</code>, <code>int32</code>, <code>int64</code>, <code>string</code>,
|
|
<code>uint</code>, <code>uint8</code>, <code>uint16</code>, <code>uint32</code>, <code>uint64</code>, <code>uintptr</code>,
|
|
then the value will be printed, instead of just its address.
|
|
Previously, this was only true for values of exactly these types.
|
|
</p>
|
|
|
|
<p><!-- CL 228900 -->
|
|
On a Unix system, if the <code>kill</code> command
|
|
or <code>kill</code> system call is used to send
|
|
a <code>SIGSEGV</code>, <code>SIGBUS</code>,
|
|
or <code>SIGFPE</code> signal to a Go program, and if the signal
|
|
is not being handled via
|
|
<a href="/pkg/os/signal/#Notify"><code>os/signal.Notify</code></a>,
|
|
the Go program will now reliably crash with a stack trace.
|
|
In earlier releases the behavior was unpredictable.
|
|
</p>
|
|
|
|
<p><!-- CL 221182, CL 229998 -->
|
|
Allocation of small objects now performs much better at high core
|
|
counts, and has lower worst-case latency.
|
|
</p>
|
|
|
|
<p><!-- CL 216401 -->
|
|
Converting a small integer value into an interface value no longer
|
|
causes allocation.
|
|
</p>
|
|
|
|
<p><!-- CL 216818 -->
|
|
Non-blocking receives on closed channels now perform as well as
|
|
non-blocking receives on open channels.
|
|
</p>
|
|
|
|
<h2 id="compiler">Compiler</h2>
|
|
|
|
<p><!-- CL 229578 -->
|
|
Package <code>unsafe</code>'s <a href="/pkg/unsafe/#Pointer">safety
|
|
rules</a> allow converting an <code>unsafe.Pointer</code>
|
|
into <code>uintptr</code> when calling certain
|
|
functions. Previously, in some cases, the compiler allowed multiple
|
|
chained conversions (for example, <code>syscall.Syscall(…,</code>
|
|
<code>uintptr(uintptr(ptr)),</code> <code>…)</code>). The compiler
|
|
now requires exactly one conversion. Code that used multiple
|
|
conversions should be updated to satisfy the safety rules.
|
|
</p>
|
|
|
|
<p><!-- CL 230544, CL 231397 -->
|
|
Go 1.15 reduces typical binary sizes by around 5% compared to Go
|
|
1.14 by eliminating certain types of GC metadata and more
|
|
aggressively eliminating unused type metadata.
|
|
</p>
|
|
|
|
<p><!-- CL 219357, CL 231600 -->
|
|
The toolchain now mitigates
|
|
<a href="https://www.intel.com/content/www/us/en/support/articles/000055650/processors.html">Intel
|
|
CPU erratum SKX102</a> on <code>GOARCH=amd64</code> by aligning
|
|
functions to 32 byte boundaries and padding jump instructions. While
|
|
this padding increases binary sizes, this is more than made up for
|
|
by the binary size improvements mentioned above.
|
|
</p>
|
|
|
|
<p><!-- CL 222661 -->
|
|
Go 1.15 adds a <code>-spectre</code> flag to both the
|
|
compiler and the assembler, to allow enabling Spectre mitigations.
|
|
These should almost never be needed and are provided mainly as a
|
|
“defense in depth” mechanism.
|
|
See the <a href="https://github.com/golang/go/wiki/Spectre">Spectre wiki page</a> for details.
|
|
</p>
|
|
|
|
<p><!-- CL 228578 -->
|
|
The compiler now rejects <code>//go:</code> compiler directives that
|
|
have no meaning for the declaration they are applied to with a
|
|
"misplaced compiler directive" error. Such misapplied directives
|
|
were broken before, but were silently ignored by the compiler.
|
|
</p>
|
|
|
|
<p><!-- CL 206658, CL 205066 -->
|
|
The compiler's <code>-json</code> optimization logging now reports
|
|
large (>= 128 byte) copies and includes explanations of escape
|
|
analysis decisions.
|
|
</p>
|
|
|
|
<h2 id="linker">Linker</h2>
|
|
|
|
<p>
|
|
This release includes substantial improvements to the Go linker,
|
|
which reduce linker resource usage (both time and memory) and
|
|
improve code robustness/maintainability.
|
|
</p>
|
|
|
|
<p>
|
|
For a representative set of large Go programs, linking is 20% faster
|
|
and requires 30% less memory on average, for <code>ELF</code>-based
|
|
OSes (Linux, FreeBSD, NetBSD, OpenBSD, Dragonfly, and Solaris)
|
|
running on <code>amd64</code> architectures, with more modest
|
|
improvements for other architecture/OS combinations.
|
|
</p>
|
|
|
|
<p>
|
|
The key contributors to better linker performance are a newly
|
|
redesigned object file format, and a revamping of internal
|
|
phases to increase concurrency (for example, applying relocations to
|
|
symbols in parallel). Object files in Go 1.15 are slightly larger
|
|
than their 1.14 equivalents.
|
|
</p>
|
|
|
|
<p>
|
|
These changes are part of a multi-release project
|
|
to <a href="https://golang.org/s/better-linker">modernize the Go
|
|
linker</a>, meaning that there will be additional linker
|
|
improvements expected in future releases.
|
|
</p>
|
|
|
|
<h2 id="objdump">Objdump</h2>
|
|
|
|
<p><!-- CL 225459 -->
|
|
The <a href="/cmd/objdump/">objdump</a> tool now supports
|
|
disassembling in GNU assembler syntax with the <code>-gnu</code>
|
|
flag.
|
|
</p>
|
|
|
|
<h2 id="library">Core library</h2>
|
|
|
|
<h3 id="time/tzdata">New embedded tzdata package</h3>
|
|
|
|
<p> <!-- CL 224588 -->
|
|
Go 1.15 includes a new package,
|
|
<a href="/pkg/time/tzdata/"><code>time/tzdata</code></a>,
|
|
that permits embedding the timezone database into a program.
|
|
Importing this package (as <code>import _ "time/tzdata"</code>)
|
|
permits the program to find timezone information even if the
|
|
timezone database is not available on the local system.
|
|
You can also embed the timezone database by building
|
|
with <code>-tags timetzdata</code>.
|
|
Either approach increases the size of the program by about 800 KB.
|
|
</p>
|
|
|
|
<h3 id="cgo">Cgo</h3>
|
|
|
|
<p><!-- CL 235817 -->
|
|
Go 1.15 will translate the C type <code>EGLConfig</code> to the
|
|
Go type <code>uintptr</code>. This change is similar to how Go
|
|
1.12 and newer treats <code>EGLDisplay</code>, Darwin's CoreFoundation and
|
|
Java's JNI types. See the <a href="/cmd/cgo/#hdr-Special_cases">cgo
|
|
documentation</a> for more information.
|
|
</p>
|
|
|
|
<h3 id="minor_library_changes">Minor changes to the library</h3>
|
|
|
|
<p>
|
|
As always, there are various minor changes and updates to the library,
|
|
made with the Go 1 <a href="/doc/go1compat">promise of compatibility</a>
|
|
in mind.
|
|
</p>
|
|
|
|
<dl id="bufio"><dt><a href="/pkg/bufio/">bufio</a></dt>
|
|
<dd>
|
|
<p><!-- CL 225357, CL 225557 -->
|
|
When a <a href="/pkg/bufio/#Scanner"><code>Scanner</code></a> is
|
|
used with an invalid
|
|
<a href="/pkg/io/#Reader"><code>io.Reader</code></a> that
|
|
incorrectly returns a negative number from <code>Read</code>,
|
|
the <code>Scanner</code> will no longer panic, but will instead
|
|
return the new error
|
|
<a href="/pkg/bufio/#ErrBadReadCount"><code>ErrBadReadCount</code></a>.
|
|
</p>
|
|
</dd>
|
|
</dl><!-- bufio -->
|
|
|
|
<dl id="crypto"><dt><a href="/pkg/crypto/">crypto</a></dt>
|
|
<dd>
|
|
<p><!-- CL 231417, CL 225460 -->
|
|
The <code>PrivateKey</code> and <code>PublicKey</code> types in the
|
|
<a href="/pkg/crypto/rsa/"><code>crypto/rsa</code></a>,
|
|
<a href="/pkg/crypto/ecdsa/"><code>crypto/ecdsa</code></a>, and
|
|
<a href="/pkg/crypto/ed25519/"><code>crypto/ed25519</code></a> packages
|
|
now have an <code>Equal</code> method to compare keys for equivalence
|
|
or to make type-safe interfaces for public keys. The method signature
|
|
is compatible with
|
|
<a href="https://pkg.go.dev/github.com/google/go-cmp/cmp#Equal"><code>go-cmp</code>'s
|
|
definition of equality</a>.
|
|
</p>
|
|
|
|
<p><!-- CL 224937 -->
|
|
<a href="/pkg/crypto/#Hash"><code>Hash</code></a> now implements
|
|
<a href="/pkg/fmt/#Stringer"><code>fmt.Stringer</code></a>.
|
|
</p>
|
|
</dd>
|
|
</dl><!-- crypto -->
|
|
|
|
<dl id="crypto/ecdsa"><dt><a href="/pkg/crypto/ecdsa/">crypto/ecdsa</a></dt>
|
|
<dd>
|
|
<p><!-- CL 217940 -->
|
|
The new <a href="/pkg/crypto/ecdsa/#SignASN1"><code>SignASN1</code></a>
|
|
and <a href="/pkg/crypto/ecdsa/#VerifyASN1"><code>VerifyASN1</code></a>
|
|
functions allow generating and verifying ECDSA signatures in the standard
|
|
ASN.1 DER encoding.
|
|
</p>
|
|
</dd>
|
|
</dl><!-- crypto/ecdsa -->
|
|
|
|
<dl id="crypto/elliptic"><dt><a href="/pkg/crypto/elliptic/">crypto/elliptic</a></dt>
|
|
<dd>
|
|
<p><!-- CL 202819 -->
|
|
The new <a href="/pkg/crypto/elliptic/#MarshalCompressed"><code>MarshalCompressed</code></a>
|
|
and <a href="/pkg/crypto/elliptic/#UnmarshalCompressed"><code>UnmarshalCompressed</code></a>
|
|
functions allow encoding and decoding NIST elliptic curve points in compressed format.
|
|
</p>
|
|
</dd>
|
|
</dl><!-- crypto/elliptic -->
|
|
|
|
<dl id="crypto/rsa"><dt><a href="/pkg/crypto/rsa/">crypto/rsa</a></dt>
|
|
<dd>
|
|
<p><!-- CL 226203 -->
|
|
<a href="/pkg/crypto/rsa/#VerifyPKCS1v15"><code>VerifyPKCS1v15</code></a>
|
|
now rejects invalid short signatures with missing leading zeroes, according to RFC 8017.
|
|
</p>
|
|
</dd>
|
|
</dl><!-- crypto/rsa -->
|
|
|
|
<dl id="crypto/tls"><dt><a href="/crypto/tls/">crypto/tls</a></dt>
|
|
<dd>
|
|
<p><!-- CL 214977 -->
|
|
The new
|
|
<a href="/pkg/crypto/tls/#Dialer"><code>Dialer</code></a>
|
|
type and its
|
|
<a href="/pkg/crypto/tls/#Dialer.DialContext"><code>DialContext</code></a>
|
|
method permits using a context to both connect and handshake with a TLS server.
|
|
</p>
|
|
|
|
<p><!-- CL 229122 -->
|
|
The new
|
|
<a href="/pkg/crypto/tls/#Config.VerifyConnection"><code>VerifyConnection</code></a>
|
|
callback on the <a href="/pkg/crypto/tls/#Config"><code>Config</code></a> type
|
|
allows custom verification logic for every connection. It has access to the
|
|
<a href="/pkg/crypto/tls/#ConnectionState"><code>ConnectionState</code></a>
|
|
which includes peer certificates, SCTs, and stapled OCSP responses.
|
|
</p>
|
|
|
|
<p><!-- CL 230679 -->
|
|
Auto-generated session ticket keys are now automatically rotated every 24 hours,
|
|
with a lifetime of 7 days, to limit their impact on forward secrecy.
|
|
</p>
|
|
|
|
<p><!-- CL 231317 -->
|
|
Session ticket lifetimes in TLS 1.2 and earlier, where the session keys
|
|
are reused for resumed connections, are now limited to 7 days, also to
|
|
limit their impact on forward secrecy.
|
|
</p>
|
|
|
|
<p><!-- CL 231038 -->
|
|
The client-side downgrade protection checks specified in RFC 8446 are now
|
|
enforced. This has the potential to cause connection errors for clients
|
|
encountering middleboxes that behave like unauthorized downgrade attacks.
|
|
</p>
|
|
|
|
<p><!-- CL 208226 -->
|
|
<a href="/pkg/crypto/tls/#SignatureScheme"><code>SignatureScheme</code></a>,
|
|
<a href="/pkg/crypto/tls/#CurveID"><code>CurveID</code></a>, and
|
|
<a href="/pkg/crypto/tls/#ClientAuthType"><code>ClientAuthType</code></a>
|
|
now implement <a href="/pkg/fmt/#Stringer"><code>fmt.Stringer</code></a>.
|
|
</p>
|
|
|
|
<p><!-- CL 236737 -->
|
|
The <a href="/pkg/crypto/tls/#ConnectionState"><code>ConnectionState</code></a>
|
|
fields <code>OCSPResponse</code> and <code>SignedCertificateTimestamps</code>
|
|
are now repopulated on client-side resumed connections.
|
|
</p>
|
|
</dd>
|
|
</dl><!-- crypto/tls -->
|
|
|
|
<dl id="crypto/x509"><dt><a href="/pkg/crypto/x509/">crypto/x509</a></dt>
|
|
<dd>
|
|
<p><!-- CL 231378, CL 231380, CL 231381 -->
|
|
If either the name on the certificate or the name being verified (with
|
|
<a href="/pkg/crypto/x509/#VerifyOptions.DNSName"><code>VerifyOptions.DNSName</code></a>
|
|
or <a href="/pkg/crypto/x509/#Certificate.VerifyHostname"><code>VerifyHostname</code></a>)
|
|
are invalid, they will now be compared case-insensitively without further
|
|
processing (without honoring wildcards or stripping trailing dots).
|
|
Invalid names include those with any characters other than letters,
|
|
digits, hyphens and underscores, those with empty labels, and names on
|
|
certificates with trailing dots.
|
|
</p>
|
|
|
|
<p><!-- CL 231379 -->
|
|
The deprecated, legacy behavior of treating the <code>CommonName</code>
|
|
field as a hostname when no Subject Alternative Names are present is now
|
|
disabled by default. It can be temporarily re-enabled by adding the value
|
|
<code>x509ignoreCN=0</code> to the <code>GODEBUG</code> environment
|
|
variable. If the <code>CommonName</code> is an invalid hostname, it's
|
|
always ignored.
|
|
</p>
|
|
|
|
<p><!-- CL 217298 -->
|
|
The new <a href="/pkg/crypto/x509/#CreateRevocationList"><code>CreateRevocationList</code></a>
|
|
function and <a href="/pkg/crypto/x509/#RevocationList"><code>RevocationList</code></a> type
|
|
allow creating RFC 5280-compliant X.509 v2 Certificate Revocation Lists.
|
|
</p>
|
|
|
|
<p><!-- CL 227098 -->
|
|
<a href="/pkg/crypto/x509/#CreateCertificate"><code>CreateCertificate</code></a>
|
|
now automatically generates the <code>SubjectKeyId</code> if the template
|
|
is a CA and doesn't explicitly specify one.
|
|
</p>
|
|
|
|
<p><!-- CL 228777 -->
|
|
<a href="/pkg/crypto/x509/#CreateCertificate"><code>CreateCertificate</code></a>
|
|
now returns an error if the template specifies <code>MaxPathLen</code> but is not a CA.
|
|
</p>
|
|
|
|
<p><!-- CL 205237 -->
|
|
On Unix systems other than macOS, the <code>SSL_CERT_DIR</code>
|
|
environment variable can now be a colon-separated list.
|
|
</p>
|
|
|
|
<p><!-- CL 227037 -->
|
|
On macOS, binaries are now always linked against
|
|
<code>Security.framework</code> to extract the system trust roots,
|
|
regardless of whether cgo is available. The resulting behavior should be
|
|
more consistent with the OS verifier.
|
|
</p>
|
|
</dd>
|
|
</dl><!-- crypto/x509 -->
|
|
|
|
<dl id="crypto/x509/pkix"><dt><a href="/pkg/crypto/x509/pkix/">crypto/x509/pkix</a></dt>
|
|
<dd>
|
|
<p><!-- CL 229864 -->
|
|
<a href="/pkg/crypto/x509/pkix/#Name.String"><code>Name.String</code></a>
|
|
now prints non-standard attributes from
|
|
<a href="/pkg/crypto/x509/pkix/#Name.Names"><code>Names</code></a> if
|
|
<a href="/pkg/crypto/x509/pkix/#Name.ExtraNames"><code>ExtraNames</code></a> is empty.
|
|
</p>
|
|
</dd>
|
|
</dl><!-- crypto/x509/pkix -->
|
|
|
|
<dl id="database/sql"><dt><a href="/pkg/database/sql/">database/sql</a></dt>
|
|
<dd>
|
|
<p><!-- CL 145758 -->
|
|
The new <a href="/pkg/database/sql/#DB.SetConnMaxIdleTime"><code>DB.SetConnMaxIdleTime</code></a>
|
|
method allows removing a connection from the connection pool after
|
|
it has been idle for a period of time, without regard to the total
|
|
lifespan of the connection. The <a href="/pkg/database/sql/#DBStats.MaxIdleTimeClosed"><code>DBStats.MaxIdleTimeClosed</code></a>
|
|
field shows the total number of connections closed due to
|
|
<code>DB.SetConnMaxIdleTime</code>.
|
|
</p>
|
|
|
|
<p><!-- CL 214317 -->
|
|
The new <a href="/pkg/database/sql/#Row.Err"><code>Row.Err</code></a> getter
|
|
allows checking for query errors without calling
|
|
<code>Row.Scan</code>.
|
|
</p>
|
|
</dd>
|
|
</dl><!-- database/sql -->
|
|
|
|
<dl id="database/sql/driver"><dt><a href="/pkg/database/sql/driver/">database/sql/driver</a></dt>
|
|
<dd>
|
|
<p><!-- CL 174122 -->
|
|
The new <a href="/pkg/database/sql/driver/#Validator"><code>Validator</code></a>
|
|
interface may be implemented by <code>Conn</code> to allow drivers
|
|
to signal if a connection is valid or if it should be discarded.
|
|
</p>
|
|
</dd>
|
|
</dl><!-- database/sql/driver -->
|
|
|
|
<dl id="debug/pe"><dt><a href="/pkg/debug/pe/">debug/pe</a></dt>
|
|
<dd>
|
|
<p><!-- CL 222637 -->
|
|
The package now defines the
|
|
<code>IMAGE_FILE</code>, <code>IMAGE_SUBSYSTEM</code>,
|
|
and <code>IMAGE_DLLCHARACTERISTICS</code> constants used by the
|
|
PE file format.
|
|
</p>
|
|
</dd>
|
|
</dl><!-- debug/pe -->
|
|
|
|
<dl id="encoding/json"><dt><a href="/pkg/encoding/json/">encoding/json</a></dt>
|
|
<dd>
|
|
<p><!-- CL 191783 -->
|
|
Decoding a JSON array into a slice no longer reuses any existing slice elements,
|
|
following the rules that the package documentation already stated.
|
|
</p>
|
|
|
|
<p><!-- CL 199837 -->
|
|
Introduce an internal limit to the maximum depth of nesting when decoding.
|
|
This reduces the possibility that a deeply nested input could use large quantities
|
|
of stack memory, or even cause a "goroutine stack exceeds limit" panic.
|
|
</p>
|
|
</dd>
|
|
</dl><!-- encoding/json -->
|
|
|
|
<dl id="encoding/xml"><dt><a href="/pkg/encoding/xml/">encoding/xml</a></dt>
|
|
<dd>
|
|
<p><!-- CL 203417 -->
|
|
The encoder has always taken care to avoid using namespace prefixes beginning with
|
|
<code>xml</code>,
|
|
which are reserved by the XML specification.
|
|
Now, following the specification more closely,
|
|
that check is case-insensitive, so that prefixes beginning with
|
|
<code>XML</code>, <code>XmL</code>,
|
|
and so on are also avoided.
|
|
</p>
|
|
</dd>
|
|
</dl><!-- encoding/xml -->
|
|
|
|
<dl id="flag"><dt><a href="/pkg/flag/">flag</a></dt>
|
|
<dd>
|
|
<p><!-- CL 221427 -->
|
|
When the flag package sees <code>-h</code> or <code>-help</code>, and
|
|
those flags are not defined, the flag package prints a usage message.
|
|
If the <a href="/pkg/flag/#FlagSet"><code>FlagSet</code></a> was created with
|
|
<a href="/pkg/flag/#ExitOnError"><code>ExitOnError</code></a>,
|
|
<a href="/pkg/flag/#FlagSet.Parse"><code>FlagSet.Parse</code></a> would then
|
|
exit with a status of 2. In this release, the exit status for <code>-h</code>
|
|
or <code>-help</code> has been changed to 0. In particular, this applies to
|
|
the default handling of command line flags.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<dl id="fmt"><dt><a href="/pkg/fmt/">fmt</a></dt>
|
|
<dd>
|
|
<p><!-- CL 215001 -->
|
|
The printing verbs <code>%#g</code> and <code>%#G</code> now preserve
|
|
trailing zeros for floating-point values.
|
|
</p>
|
|
</dd>
|
|
</dl><!-- fmt -->
|
|
|
|
<dl id="go/printer"><dt><a href="/pkg/go/printer/">go/printer</a></dt>
|
|
<dd>
|
|
<p><!-- CL 231461 -->
|
|
The new <a href="/pkg/go/printer/#Mode"><code>Mode</code></a>
|
|
value <a href="/pkg/go/printer/#StdFormat"><code>StdFormat</code></a>
|
|
directs the printer to apply standard formatting changes while
|
|
printing the output.
|
|
</dd>
|
|
</dl><!-- go/printer -->
|
|
|
|
<dl id="io/ioutil"><dt><a href="/pkg/io/ioutil/">io/ioutil</a></dt>
|
|
<dd>
|
|
<p><!-- CL 212597 -->
|
|
<a href="/pkg/io/ioutil/#TempDir"><code>TempDir</code></a> and
|
|
<a href="/pkg/io/ioutil/#TempFile"><code>TempFile</code></a>
|
|
now reject patterns that contain path separators.
|
|
That is, calls such as <code>ioutil.TempFile("/tmp",</code> <code>"../base*")</code> will no longer succeed.
|
|
This prevents unintended directory traversal.
|
|
</p>
|
|
</dd>
|
|
</dl><!-- io/ioutil -->
|
|
|
|
<dl id="math/big"><dt><a href="/pkg/math/big/">math/big</a></dt>
|
|
<dd>
|
|
<p><!-- CL 230397 -->
|
|
The new <a href="/pkg/math/big/#Int.FillBytes"><code>Int.FillBytes</code></a>
|
|
method allows serializing to fixed-size pre-allocated byte slices.
|
|
</p>
|
|
</dd>
|
|
</dl><!-- math/big -->
|
|
|
|
<dl id="net"><dt><a href="/pkg/net/">net</a></dt>
|
|
<dd>
|
|
<p><!-- CL 228645 -->
|
|
If an I/O operation exceeds a deadline set by
|
|
the <a href="/pkg/net/#Conn"><code>Conn.SetDeadline</code></a>,
|
|
<code>Conn.SetReadDeadline</code>,
|
|
or <code>Conn.SetWriteDeadline</code> methods, it will now
|
|
return an error that is or wraps
|
|
<a href="/pkg/os/#ErrDeadlineExceeded"><code>os.ErrDeadlineExceeded</code></a>.
|
|
This may be used to reliably detect whether an error is due to
|
|
an exceeded deadline.
|
|
Earlier releases recommended calling the <code>Timeout</code>
|
|
method on the error, but I/O operations can return errors for
|
|
which <code>Timeout</code> returns <code>true</code> although a
|
|
deadline has not been exceeded.
|
|
</p>
|
|
|
|
<p><!-- CL 228641 -->
|
|
The new <a href="/pkg/net/#Resolver.LookupIP"><code>Resolver.LookupIP</code></a>
|
|
method supports IP lookups that are both network-specific and accept a context.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<dl id="net/http"><dt><a href="/pkg/net/http/">net/http</a></dt>
|
|
<dd>
|
|
<p><!-- CL 231418, CL 231419 -->
|
|
Parsing is now stricter as a hardening measure against request smuggling attacks:
|
|
non-ASCII white space is no longer trimmed like SP and HTAB, and support for the
|
|
"<code>identity</code>" <code>Transfer-Encoding</code> was dropped.
|
|
</p>
|
|
</dd>
|
|
</dl><!-- net/http -->
|
|
|
|
<dl id="net/http/httputil"><dt><a href="/pkg/net/http/httputil/">net/http/httputil</a></dt>
|
|
<dd>
|
|
<p><!-- CL 230937 -->
|
|
<a href="/pkg/net/http/httputil/#ReverseProxy"><code>ReverseProxy</code></a>
|
|
now supports not modifying the <code>X-Forwarded-For</code>
|
|
header when the incoming <code>Request.Header</code> map entry
|
|
for that field is <code>nil</code>.
|
|
</p>
|
|
|
|
<p><!-- CL 224897 -->
|
|
When a Switching Protocol (like WebSocket) request handled by
|
|
<a href="/pkg/net/http/httputil/#ReverseProxy"><code>ReverseProxy</code></a>
|
|
is canceled, the backend connection is now correctly closed.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<dl id="net/http/pprof"><dt><a href="/pkg/net/http/pprof/">net/http/pprof</a></dt>
|
|
<dd>
|
|
<p><!-- CL 147598, CL 229537 -->
|
|
All profile endpoints now support a "<code>seconds</code>" parameter. When present,
|
|
the endpoint profiles for the specified number of seconds and reports the difference.
|
|
The meaning of the "<code>seconds</code>" parameter in the <code>cpu</code> profile and
|
|
the trace endpoints is unchanged.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<dl id="net/url"><dt><a href="/pkg/net/url/">net/url</a></dt>
|
|
<dd>
|
|
<p><!-- CL 227645 -->
|
|
The new <a href="/pkg/net/url/#URL"><code>URL</code></a> field
|
|
<code>RawFragment</code> and method <a href="/pkg/net/url/#URL.EscapedFragment"><code>EscapedFragment</code></a>
|
|
provide detail about and control over the exact encoding of a particular fragment.
|
|
These are analogous to
|
|
<code>RawPath</code> and <a href="/pkg/net/url/#URL.EscapedPath"><code>EscapedPath</code></a>.
|
|
</p>
|
|
<p><!-- CL 207082 -->
|
|
The new <a href="/pkg/net/url/#URL"><code>URL</code></a>
|
|
method <a href="/pkg/net/url/#URL.Redacted"><code>Redacted</code></a>
|
|
returns the URL in string form with any password replaced with <code>xxxxx</code>.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<dl id="os"><dt><a href="/pkg/os/">os</a></dt>
|
|
<dd>
|
|
<p><!-- CL -->
|
|
If an I/O operation exceeds a deadline set by
|
|
the <a href="/pkg/os/#File.SetDeadline"><code>File.SetDeadline</code></a>,
|
|
<a href="/pkg/os/#File.SetReadDeadline"><code>File.SetReadDeadline</code></a>,
|
|
or <a href="/pkg/os/#File.SetWriteDeadline"><code>File.SetWriteDeadline</code></a>
|
|
methods, it will now return an error that is or wraps
|
|
<a href="/pkg/os/#ErrDeadlineExceeded"><code>os.ErrDeadlineExceeded</code></a>.
|
|
This may be used to reliably detect whether an error is due to
|
|
an exceeded deadline.
|
|
Earlier releases recommended calling the <code>Timeout</code>
|
|
method on the error, but I/O operations can return errors for
|
|
which <code>Timeout</code> returns <code>true</code> although a
|
|
deadline has not been exceeded.
|
|
</p>
|
|
|
|
<p><!-- CL 232862 -->
|
|
Packages <code>os</code> and <code>net</code> now automatically
|
|
retry system calls that fail with <code>EINTR</code>. Previously
|
|
this led to spurious failures, which became more common in Go
|
|
1.14 with the addition of asynchronous preemption. Now this is
|
|
handled transparently.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<dl id="plugin"><dt><a href="/pkg/plugin/">plugin</a></dt>
|
|
<dd>
|
|
<p><!-- CL 182959 -->
|
|
DWARF generation is now supported (and enabled by default) for <code>-buildmode=plugin</code> on macOS.
|
|
</p>
|
|
</dd>
|
|
<dd>
|
|
<p><!-- CL 191617 -->
|
|
Building with <code>-buildmode=plugin</code> is now supported on <code>freebsd/amd64</code>.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<dl id="reflect"><dt><a href="/pkg/reflect/">reflect</a></dt>
|
|
<dd>
|
|
<p><!-- CL 228902 -->
|
|
Package <code>reflect</code> now disallows accessing methods of all
|
|
non-exported fields, whereas previously it allowed accessing
|
|
those of non-exported, embedded fields. Code that relies on the
|
|
previous behavior should be updated to instead access the
|
|
corresponding promoted method of the enclosing variable.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<dl id="regexp"><dt><a href="/pkg/regexp/">regexp</a></dt>
|
|
<dd>
|
|
<p><!-- CL 187919 -->
|
|
The new <a href="/pkg/regexp/#Regexp.SubexpIndex"><code>Regexp.SubexpIndex</code></a>
|
|
method returns the index of the first subexpression with the given name
|
|
within the regular expression.
|
|
</p>
|
|
</dd>
|
|
</dl><!-- regexp -->
|
|
|
|
<dl id="pkg-runtime"><dt><a href="/pkg/runtime/">runtime</a></dt>
|
|
<dd>
|
|
<p><!-- CL 216557 -->
|
|
Several functions, including
|
|
<a href="/pkg/runtime/#ReadMemStats"><code>ReadMemStats</code></a>
|
|
and
|
|
<a href="/pkg/runtime/#GoroutineProfile"><code>GoroutineProfile</code></a>,
|
|
no longer block if a garbage collection is in progress.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<dl id="pkg-runtime-pprof"><dt><a href="/pkg/runtime/pprof/">runtime/pprof</a></dt>
|
|
<dd>
|
|
<p><!-- CL 189318 -->
|
|
The goroutine profile includes the profile labels associated with each goroutine
|
|
at the time of profiling. This feature is not yet implemented for the profile
|
|
reported with <code>debug=2</code>.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<dl id="strconv"><dt><a href="/pkg/strconv/">strconv</a></dt>
|
|
<dd>
|
|
<p><!-- CL 216617 -->
|
|
<a href="/pkg/strconv/#FormatComplex"><code>FormatComplex</code></a> and <a href="/pkg/strconv/#ParseComplex"><code>ParseComplex</code></a> are added for working with complex numbers.
|
|
</p>
|
|
<p>
|
|
<a href="/pkg/strconv/#FormatComplex"><code>FormatComplex</code></a> converts a complex number into a string of the form (a+bi), where a and b are the real and imaginary parts.
|
|
</p>
|
|
<p>
|
|
<a href="/pkg/strconv/#ParseComplex"><code>ParseComplex</code></a> converts a string into a complex number of a specified precision. <code>ParseComplex</code> accepts complex numbers in the format <code>N+Ni</code>.
|
|
</p>
|
|
</dd>
|
|
</dl><!-- strconv -->
|
|
|
|
<dl id="sync"><dt><a href="/pkg/sync/">sync</a></dt>
|
|
<dd>
|
|
<p><!-- CL 205899, golang.org/issue/33762 -->
|
|
The new method
|
|
<a href="/pkg/sync/#Map.LoadAndDelete"><code>Map.LoadAndDelete</code></a>
|
|
atomically deletes a key and returns the previous value if present.
|
|
</p>
|
|
<p><!-- CL 205899 -->
|
|
The method
|
|
<a href="/pkg/sync/#Map.Delete"><code>Map.Delete</code></a>
|
|
is more efficient.
|
|
</p>
|
|
</dl><!-- sync -->
|
|
|
|
<dl id="syscall"><dt><a href="/pkg/syscall/">syscall</a></dt>
|
|
<dd>
|
|
<p><!-- CL 231638 -->
|
|
On Unix systems, functions that use
|
|
<a href="/pkg/syscall/#SysProcAttr"><code>SysProcAttr</code></a>
|
|
will now reject attempts to set both the <code>Setctty</code>
|
|
and <code>Foreground</code> fields, as they both use
|
|
the <code>Ctty</code> field but do so in incompatible ways.
|
|
We expect that few existing programs set both fields.
|
|
</p>
|
|
<p>
|
|
Setting the <code>Setctty</code> field now requires that the
|
|
<code>Ctty</code> field be set to a file descriptor number in the
|
|
child process, as determined by the <code>ProcAttr.Files</code> field.
|
|
Using a child descriptor always worked, but there were certain
|
|
cases where using a parent file descriptor also happened to work.
|
|
Some programs that set <code>Setctty</code> will need to change
|
|
the value of <code>Ctty</code> to use a child descriptor number.
|
|
</p>
|
|
|
|
<p><!-- CL 220578 -->
|
|
It is <a href="/pkg/syscall/#Proc.Call">now possible</a> to call
|
|
system calls that return floating point values
|
|
on <code>windows/amd64</code>.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<dl id="testing"><dt><a href="/pkg/testing/">testing</a></dt>
|
|
<dd>
|
|
<p><!-- golang.org/issue/28135 -->
|
|
The <code>testing.T</code> type now has a
|
|
<a href="/pkg/testing/#T.Deadline"><code>Deadline</code></a> method
|
|
that reports the time at which the test binary will have exceeded its
|
|
timeout.
|
|
</p>
|
|
|
|
<p><!-- golang.org/issue/34129 -->
|
|
A <code>TestMain</code> function is no longer required to call
|
|
<code>os.Exit</code>. If a <code>TestMain</code> function returns,
|
|
the test binary will call <code>os.Exit</code> with the value returned
|
|
by <code>m.Run</code>.
|
|
</p>
|
|
|
|
<p><!-- CL 226877, golang.org/issue/35998 -->
|
|
The new methods
|
|
<a href="/pkg/testing/#T.TempDir"><code>T.TempDir</code></a> and
|
|
<a href="/pkg/testing/#B.TempDir"><code>B.TempDir</code></a> and
|
|
return temporary directories that are automatically cleaned up
|
|
at the end of the test.
|
|
</p>
|
|
</dd>
|
|
</dl><!-- testing -->
|
|
|
|
<dl id="time"><dt><a href="/pkg/time/">time</a></dt>
|
|
<dd>
|
|
<p><!-- CL 220424, CL 217362, golang.org/issue/33184 -->
|
|
The new method
|
|
<a href="/pkg/time/#Ticker.Reset"><code>Ticker.Reset</code></a>
|
|
supports changing the duration of a ticker.
|
|
</p>
|
|
|
|
<p><!-- CL 227878 -->
|
|
When returning an error, <a href="/pkg/time/#ParseDuration"><code>ParseDuration</code></a> now quotes the original value.
|
|
</p>
|
|
</dd>
|
|
</dl><!-- time -->
|