<!--{
"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">Introduction to Go 1.15</h2>
<p>
The latest Go release, version 1.15, arrives six months after <a href="go1.14">Go 1.14</a>.
Most of its changes are in the implementation of the toolchain, runtime, and libraries.
As always, the release maintains the Go 1 <a href="/doc/go1compat.html">promise of compatibility</a>.
We expect almost all Go programs to continue to compile and run as before.
</p>
<p>
Go 1.15 includes <a href="#linker">substantial improvements to the linker</a>,
improves <a href="#runtime">allocation for small objects at high core counts</a>, and
deprecates <a href="#commonname">X.509 CommonName</a>.
<code>GOPROXY</code> now supports skipping proxies that return errors and
a new <a href="#time/tzdata">embedded tzdata package</a> has been added.
</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 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 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>
<h3 id="386">386</h3>
<p><!-- golang.org/issue/40255 -->
Go 1.15 is the last release to support x87-only floating-point
hardware (<code>GO386=387</code>). Future releases will require at
least SSE2 support on 386, raising Go's
minimum <code>GOARCH=386</code> requirement to the Intel Pentium 4
(released in 2000) or AMD Opteron/Athlon 64 (released in 2003).
</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</