mirror of
https://github.com/golang/go
synced 2024-11-24 12:20:17 -07:00
749f6e9eb6
Change-Id: I032791a3cda1916099b0fd2955dcca4e69763660 Reviewed-on: https://go-review.googlesource.com/c/go/+/357958 Trust: Ian Lance Taylor <iant@golang.org> Reviewed-by: Bryan C. Mills <bcmills@google.com>
214 lines
8.0 KiB
HTML
214 lines
8.0 KiB
HTML
<!--{
|
|
"Title": "Go 1.18 Release Notes",
|
|
"Path": "/doc/go1.18"
|
|
}-->
|
|
|
|
<!--
|
|
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.18</h2>
|
|
|
|
<p>
|
|
<strong>
|
|
Go 1.18 is not yet released. These are work-in-progress
|
|
release notes. Go 1.18 is expected to be released in February 2022.
|
|
</strong>
|
|
</p>
|
|
|
|
<h2 id="language">Changes to the language</h2>
|
|
|
|
<p>
|
|
TODO: complete this section
|
|
</p>
|
|
|
|
<h2 id="ports">Ports</h2>
|
|
|
|
<p id="freebsd">
|
|
Go 1.18 is the last release that is supported on FreeBSD 11.x, which has
|
|
already reached end-of-life. Go 1.19 will require FreeBSD 12.2+ or FreeBSD
|
|
13.0+.
|
|
FreeBSD 13.0+ will require a kernel with the COMPAT_FREEBSD12 option set (this is the default).
|
|
</p>
|
|
|
|
<h2 id="tools">Tools</h2>
|
|
|
|
<p>
|
|
TODO: complete this section, or delete if not needed
|
|
</p>
|
|
|
|
<h3 id="go-command">Go command</h3>
|
|
|
|
<p><!-- golang.org/issue/43684 -->
|
|
<code>go</code> <code>get</code> no longer builds or installs packages in
|
|
module-aware mode. <code>go</code> <code>get</code> is now dedicated to
|
|
adjusting dependencies in <code>go.mod</code>. Effectively, the
|
|
<code>-d</code> flag is always enabled. To install the latest version
|
|
of an executable outside the context of the current module, use
|
|
<a href="https://golang.org/ref/mod#go-install"><code>go</code>
|
|
<code>install</code> <code>example.com/cmd@latest</code></a>. Any
|
|
<a href="https://golang.org/ref/mod#version-queries">version query</a>
|
|
may be used instead of <code>latest</code>. This form of <code>go</code>
|
|
<code>install</code> was added in Go 1.16, so projects supporting older
|
|
versions may need to provide install instructions for both <code>go</code>
|
|
<code>install</code> and <code>go</code> <code>get</code>. <code>go</code>
|
|
<code>get</code> now reports an error when used outside a module, since there
|
|
is no <code>go.mod</code> file to update. In GOPATH mode (with
|
|
<code>GO111MODULE=off</code>), <code>go</code> <code>get</code> still builds
|
|
and installs packages, as before.
|
|
</p>
|
|
|
|
<p><!-- golang.org/issue/37475 -->
|
|
The <code>go</code> command now embeds version control information in
|
|
binaries including the currently checked-out revision, commit time, and a
|
|
flag indicating whether edited or untracked files are present. Version
|
|
control information is embedded if the <code>go</code> command is invoked in
|
|
a directory within a Git, Mercurial, Fossil, or Bazaar repository, and the
|
|
<code>main</code> package and its containing main module are in the same
|
|
repository. This information may be omitted using the flag
|
|
<code>-buildvcs=false</code>.
|
|
</p>
|
|
|
|
<p><!-- golang.org/issue/37475 -->
|
|
Additionally, the <code>go</code> command embeds information about the build
|
|
including build and tool tags (set with <code>-tags</code>), compiler,
|
|
assembler, and linker flags (like <code>-gcflags</code>), whether cgo was
|
|
enabled, and if it was, the values of the cgo environment variables
|
|
(like <code>CGO_CFLAGS</code>). This information may be omitted using the
|
|
flag <code>-buildinfo=false</code>. Both VCS and build information may be
|
|
read together with module information using <code>go</code>
|
|
<code>version</code> <code>-m</code> <code>file</code> or
|
|
<code>runtime/debug.ReadBuildInfo</code> (for the currently running binary)
|
|
or the new <a href="#debug/buildinfo"><code>debug/buildinfo</code></a>
|
|
package.
|
|
</p>
|
|
|
|
<p><!-- golang.org/issue/47788 -->
|
|
The <code>go</code> command no longer supports <code>-linkshared</code>
|
|
and <code>-buildmode=shared</code>.
|
|
(<code>shared<code> building and linking has never worked in module mode or
|
|
when <code>GOROOT</code> is not writable.)
|
|
<p>
|
|
|
|
<p>
|
|
TODO: complete this section, or delete if not needed
|
|
</p>
|
|
|
|
<h3 id="gofmt"><code>gofmt</code></h3>
|
|
|
|
<p><!-- https://golang.org/issue/43566 -->
|
|
<code>gofmt</code> now reads and formats input files concurrently, with a
|
|
memory limit proportional to <code>GOMAXPROCS</code>. On a machine with
|
|
multiple CPUs, <code>gofmt</code> should now be significantly faster.
|
|
</p>
|
|
|
|
|
|
<h2 id="runtime">Runtime</h2>
|
|
|
|
<p>
|
|
TODO: complete this section, or delete if not needed
|
|
</p>
|
|
|
|
<h2 id="compiler">Compiler</h2>
|
|
|
|
<p>
|
|
TODO: complete this section, or delete if not needed
|
|
</p>
|
|
|
|
<h2 id="linker">Linker</h2>
|
|
|
|
<p>
|
|
TODO: complete this section, or delete if not needed
|
|
</p>
|
|
|
|
<h2 id="library">Core library</h2>
|
|
|
|
<p>
|
|
TODO: complete this section
|
|
</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>
|
|
|
|
<p>
|
|
TODO: complete this section
|
|
</p>
|
|
|
|
<dl id="debug/buildinfo"><dt><a href="/pkg/debug/buildinfo">debug/buildinfo</a></dt>
|
|
<dd>
|
|
<p><!-- golang.org/issue/39301 -->
|
|
This new package provides access to module versions, version control
|
|
information, and build flags embedded in executable files built by
|
|
the <code>go</code> command. The same information is also available via
|
|
<a href="/pkg/runtime/debug#ReadBuildInfo"><code>runtime/debug.ReadBuildInfo</code></a>
|
|
for the currently running binary and via <code>go</code>
|
|
<code>version</code> <code>-m</code> on the command line.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<dl id="image/draw"><dt><a href="/pkg/image/draw/">image/draw</a></dt>
|
|
<dd>
|
|
<p><!-- CL 340049 -->
|
|
The <code>Draw</code> and <code>DrawMask</code> fallback implementations
|
|
(used when the arguments are not the most common image types) are now
|
|
faster when those arguments implement the optional
|
|
<a href="/pkg/image/draw/#RGBA64Image"><code>draw.RGBA64Image</code></a>
|
|
and <a href="/pkg/image/#RGBA64Image"><code>image.RGBA64Image</code></a>
|
|
interfaces that were added in Go 1.17.
|
|
</p>
|
|
</dd>
|
|
</dl><!-- image/draw -->
|
|
|
|
<dl id="reflect"><dt><a href="/pkg/reflect/">reflect</a></dt>
|
|
<dd>
|
|
<p><!-- CL 356049, 320929 -->
|
|
The new
|
|
<a href="/pkg/reflect/#Value.SetIterKey"><code>Value.SetIterKey</code></a>
|
|
and <a href="/pkg/reflect/#Value.SetIterValue"><code>Value.SetIterValue</code></a>
|
|
methods set a Value using a map iterator as the source. They are equivalent to
|
|
<code>Value.Set(iter.Key())</code> and <code>Value.Set(iter.Value())</code> but
|
|
do fewer allocations.
|
|
</p>
|
|
</dd>
|
|
<dd>
|
|
<p><!-- CL 350691 -->
|
|
The new
|
|
<a href="/pkg/reflect/#Value.UnsafePointer"><code>Value.UnsafePointer</code></a>
|
|
method returns the Value's value as an <a href="/pkg/unsafe/#Pointer"><code>unsafe.Pointer</code></a>.
|
|
This allows callers to migrate from <a href="/pkg/reflect/#Value.UnsafeAddr"><code>Value.UnsafeAddr</code></a>
|
|
and <a href="/pkg/reflect/#Value.Pointer"><code>Value.Pointer</code></a>
|
|
to eliminate the need to perform uintptr to unsafe.Pointer conversions at the callsite (as unsafe.Pointer rules require).
|
|
</p>
|
|
</dd>
|
|
</dl><!-- reflect -->
|
|
|
|
<dl id="syscall"><dt><a href="/pkg/syscall/">syscall</a></dt>
|
|
<dd>
|
|
<p><!-- CL 336550 -->
|
|
The new function <a href="/pkg/syscall/?GOOS=windows#SyscallN"><code>SyscallN</code></a>
|
|
has been introduced for Windows, allowing for calls with arbitrary number
|
|
of arguments. As a result,
|
|
<a href="/pkg/syscall/?GOOS=windows#Syscall"><code>Syscall</code></a>,
|
|
<a href="/pkg/syscall/?GOOS=windows#Syscall6"><code>Syscall6</code></a>,
|
|
<a href="/pkg/syscall/?GOOS=windows#Syscall9"><code>Syscall9</code></a>,
|
|
<a href="/pkg/syscall/?GOOS=windows#Syscall12"><code>Syscall12</code></a>,
|
|
<a href="/pkg/syscall/?GOOS=windows#Syscall15"><code>Syscall15</code></a>, and
|
|
<a href="/pkg/syscall/?GOOS=windows#Syscall18"><code>Syscall18</code></a> are
|
|
deprecated in favor of <a href="/pkg/syscall/?GOOS=windows#SyscallN"><code>SyscallN</code></a>.
|
|
</p>
|
|
</dd>
|
|
</dl><!-- syscall -->
|