aboutsummaryrefslogtreecommitdiff
path: root/doc/go1.12.html
diff options
context:
space:
mode:
Diffstat (limited to 'doc/go1.12.html')
-rw-r--r--doc/go1.12.html949
1 files changed, 0 insertions, 949 deletions
diff --git a/doc/go1.12.html b/doc/go1.12.html
deleted file mode 100644
index a8b0c87fe5..0000000000
--- a/doc/go1.12.html
+++ /dev/null
@@ -1,949 +0,0 @@
-<!--{
- "Title": "Go 1.12 Release Notes",
- "Path": "/doc/go1.12",
- "Template": true
-}-->
-
-<!--
-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.12</h2>
-
-<p>
- The latest Go release, version 1.12, arrives six months after <a href="go1.11">Go 1.11</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">promise of compatibility</a>.
- We expect almost all Go programs to continue to compile and run as before.
-</p>
-
-<h2 id="language">Changes to the language</h2>
-
-<p>
- There are no changes to the language specification.
-</p>
-
-<h2 id="ports">Ports</h2>
-
-<p><!-- CL 138675 -->
- The race detector is now supported on <code>linux/arm64</code>.
-</p>
-
-<p id="freebsd">
- Go 1.12 is the last release that is supported on FreeBSD 10.x, which has
- already reached end-of-life. Go 1.13 will require FreeBSD 11.2+ or FreeBSD
- 12.0+.
- FreeBSD 12.0+ requires a kernel with the COMPAT_FREEBSD11 option set (this is the default).
-</p>
-
-<p><!-- CL 146898 -->
- cgo is now supported on <code>linux/ppc64</code>.
-</p>
-
-<p id="hurd"><!-- CL 146023 -->
- <code>hurd</code> is now a recognized value for <code>GOOS</code>, reserved
- for the GNU/Hurd system for use with <code>gccgo</code>.
-</p>
-
-<h3 id="windows">Windows</h3>
-
-<p>
- Go's new <code>windows/arm</code> port supports running Go on Windows 10
- IoT Core on 32-bit ARM chips such as the Raspberry Pi 3.
-</p>
-
-<h3 id="aix">AIX</h3>
-
-<p>
- Go now supports AIX 7.2 and later on POWER8 architectures (<code>aix/ppc64</code>). External linking, cgo, pprof and the race detector aren't yet supported.
-</p>
-
-<h3 id="darwin">Darwin</h3>
-
-<p>
- Go 1.12 is the last release that will run on macOS 10.10 Yosemite.
- Go 1.13 will require macOS 10.11 El Capitan or later.
-</p>
-
-<p><!-- CL 141639 -->
- <code>libSystem</code> is now used when making syscalls on Darwin,
- ensuring forward-compatibility with future versions of macOS and iOS.
- <!-- CL 153338 -->
- The switch to <code>libSystem</code> triggered additional App Store
- checks for private API usage. Since it is considered private,
- <code>syscall.Getdirentries</code> now always fails with
- <code>ENOSYS</code> on iOS.
- Additionally, <a href="/pkg/syscall/#Setrlimit"><code>syscall.Setrlimit</code></a>
- reports <code>invalid</code> <code>argument</code> in places where it historically
- succeeded. These consequences are not specific to Go and users should expect
- behavioral parity with <code>libSystem</code>'s implementation going forward.
-</p>
-
-<h2 id="tools">Tools</h2>
-
-<h3 id="vet"><code>go tool vet</code> no longer supported</h3>
-
-<p>
- The <code>go vet</code> command has been rewritten to serve as the
- base for a range of different source code analysis tools. See
- the <a href="https://godoc.org/golang.org/x/tools/go/analysis">golang.org/x/tools/go/analysis</a>
- package for details. A side-effect is that <code>go tool vet</code>
- is no longer supported. External tools that use <code>go tool
- vet</code> must be changed to use <code>go
- vet</code>. Using <code>go vet</code> instead of <code>go tool
- vet</code> should work with all supported versions of Go.
-</p>
-
-<p>
- As part of this change, the experimental <code>-shadow</code> option
- is no longer available with <code>go vet</code>. Checking for
- variable shadowing may now be done using
-<pre>
-go get -u golang.org/x/tools/go/analysis/passes/shadow/cmd/shadow
-go vet -vettool=$(which shadow)
-</pre>
-</p>
-
-<h3 id="tour">Tour</h3>
-
-<p> <!-- CL 152657 -->
-The Go tour is no longer included in the main binary distribution. To
-run the tour locally, instead of running <code>go</code> <code>tool</code> <code>tour</code>,
-manually install it:
-<pre>
-go get -u golang.org/x/tour
-tour
-</pre>
-</p>
-
-<h3 id="gocache">Build cache requirement</h3>
-
-<p>
- The <a href="/cmd/go/#hdr-Build_and_test_caching">build cache</a> is now
- required as a step toward eliminating
- <code>$GOPATH/pkg</code>. Setting the environment variable
- <code>GOCACHE=off</code> will cause <code>go</code> commands that write to the
- cache to fail.
-</p>
-
-<h3 id="binary-only">Binary-only packages</h3>
-
-<p>
- Go 1.12 is the last release that will support binary-only packages.
-</p>
-
-<h3 id="cgo">Cgo</h3>
-
-<p>
- Go 1.12 will translate the C type <code>EGLDisplay</code> to the Go type <code>uintptr</code>.
- This change is similar to how Go 1.10 and newer treats Darwin's CoreFoundation
- and Java's JNI types. See the
- <a href="/cmd/cgo/#hdr-Special_cases">cgo documentation</a>
- for more information.
-</p>
-
-<p><!-- CL 152657 -->
- Mangled C names are no longer accepted in packages that use Cgo. Use the Cgo
- names instead. For example, use the documented cgo name <code>C.char</code>
- rather than the mangled name <code>_Ctype_char</code> that cgo generates.
-</p>
-
-<h3 id="modules">Modules</h3>
-
-<p><!-- CL 148517 -->
- When <code>GO111MODULE</code> is set to <code>on</code>, the <code>go</code>
- command now supports module-aware operations outside of a module directory,
- provided that those operations do not need to resolve import paths relative to
- the current directory or explicitly edit the <code>go.mod</code> file.
- Commands such as <code>go</code> <code>get</code>,
- <code>go</code> <code>list</code>, and
- <code>go</code> <code>mod</code> <code>download</code> behave as if in a
- module with initially-empty requirements.
- In this mode, <code>go</code> <code>env</code> <code>GOMOD</code> reports
- the system's null device (<code>/dev/null</code> or <code>NUL</code>).
-</p>
-
-<p><!-- CL 146382 -->
- <code>go</code> commands that download and extract modules are now safe to
- invoke concurrently.
- The module cache (<code>GOPATH/pkg/mod</code>) must reside in a filesystem that
- supports file locking.
-</p>
-
-<p><!-- CL 147282, 147281 -->
- The <code>go</code> directive in a <code>go.mod</code> file now indicates the
- version of the language used by the files within that module.
- It will be set to the current release
- (<code>go</code> <code>1.12</code>) if no existing version is
- present.
- If the <code>go</code> directive for a module specifies a
- version <em>newer</em> than the toolchain in use, the <code>go</code> command
- will attempt to build the packages regardless, and will note the mismatch only if
- that build fails.
-</p>
-
-<p><!-- CL 147282, 147281 -->
- This changed use of the <code>go</code> directive means that if you
- use Go 1.12 to build a module, thus recording <code>go 1.12</code>
- in the <code>go.mod</code> file, you will get an error when
- attempting to build the same module with Go 1.11 through Go 1.11.3.
- Go 1.11.4 or later will work fine, as will releases older than Go 1.11.
- If you must use Go 1.11 through 1.11.3, you can avoid the problem by
- setting the language version to 1.11, using the Go 1.12 go tool,
- via <code>go mod edit -go=1.11</code>.
-</p>
-
-<p><!-- CL 152739 -->
- When an import cannot be resolved using the active modules,
- the <code>go</code> command will now try to use the modules mentioned in the
- main module's <code>replace</code> directives before consulting the module
- cache and the usual network sources.
- If a matching replacement is found but the <code>replace</code> directive does
- not specify a version, the <code>go</code> command uses a pseudo-version
- derived from the zero <code>time.Time</code> (such
- as <code>v0.0.0-00010101000000-000000000000</code>).
-</p>
-
-<h3 id="compiler">Compiler toolchain</h3>
-
-<p><!-- CL 134155, 134156 -->
- The compiler's live variable analysis has improved. This may mean that
- finalizers will be executed sooner in this release than in previous
- releases. If that is a problem, consider the appropriate addition of a
- <a href="/pkg/runtime/#KeepAlive"><code>runtime.KeepAlive</code></a> call.
-</p>
-
-<p><!-- CL 147361 -->
- More functions are now eligible for inlining by default, including
- functions that do nothing but call another function.
- This extra inlining makes it additionally important to use
- <a href="/pkg/runtime/#CallersFrames"><code>runtime.CallersFrames</code></a>
- instead of iterating over the result of
- <a href="/pkg/runtime/#Callers"><code>runtime.Callers</code></a> directly.
-<pre>
-// Old code which no longer works correctly (it will miss inlined call frames).
-var pcs [10]uintptr
-n := runtime.Callers(1, pcs[:])
-for _, pc := range pcs[:n] {
- f := runtime.FuncForPC(pc)
- if f != nil {
- fmt.Println(f.Name())
- }
-}
-</pre>
-<pre>
-// New code which will work correctly.
-var pcs [10]uintptr
-n := runtime.Callers(1, pcs[:])
-frames := runtime.CallersFrames(pcs[:n])
-for {
- frame, more := frames.Next()
- fmt.Println(frame.Function)
- if !more {
- break
- }
-}
-</pre>
-</p>
-
-<p><!-- CL 153477 -->
- Wrappers generated by the compiler to implement method expressions
- are no longer reported
- by <a href="/pkg/runtime/#CallersFrames"><code>runtime.CallersFrames</code></a>
- and <a href="/pkg/runtime/#Stack"><code>runtime.Stack</code></a>. They
- are also not printed in panic stack traces.
-
- This change aligns the <code>gc</code> toolchain to match
- the <code>gccgo</code> toolchain, which already elided such wrappers
- from stack traces.
-
- Clients of these APIs might need to adjust for the missing
- frames. For code that must interoperate between 1.11 and 1.12
- releases, you can replace the method expression <code>x.M</code>
- with the function literal <code>func (...) { x.M(...) } </code>.
-</p>
-
-<p><!-- CL 144340 -->
- The compiler now accepts a <code>-lang</code> flag to set the Go language
- version to use. For example, <code>-lang=go1.8</code> causes the compiler to
- emit an error if the program uses type aliases, which were added in Go 1.9.
- Language changes made before Go 1.12 are not consistently enforced.
-</p>
-
-<p><!-- CL 147160 -->
- The compiler toolchain now uses different conventions to call Go
- functions and assembly functions. This should be invisible to users,
- except for calls that simultaneously cross between Go and
- assembly <em>and</em> cross a package boundary. If linking results
- in an error like "relocation target not defined for ABIInternal (but
- is defined for ABI0)", please refer to the
- <a href="https://github.com/golang/proposal/blob/master/design/27539-internal-abi.md#compatibility">compatibility section</a>
- of the ABI design document.
-</p>
-
-<p><!-- CL 145179 -->
- There have been many improvements to the DWARF debug information
- produced by the compiler, including improvements to argument
- printing and variable location information.
-</p>
-
-<p><!-- CL 61511 -->
- Go programs now also maintain stack frame pointers on <code>linux/arm64</code>
- for the benefit of profiling tools like <code>perf</code>. The frame pointer
- maintenance has a small run-time overhead that varies but averages around 3%.
- To build a toolchain that does not use frame pointers, set
- <code>GOEXPERIMENT=noframepointer</code> when running <code>make.bash</code>.
-</p>
-
-<p><!-- CL 142717 -->
- The obsolete "safe" compiler mode (enabled by the <code>-u</code> gcflag) has been removed.
-</p>
-
-<h3 id="godoc"><code>godoc</code> and <code>go</code> <code>doc</code></h3>
-
-<p>
- In Go 1.12, <code>godoc</code> no longer has a command-line interface and
- is only a web server. Users should use <code>go</code> <code>doc</code>
- for command-line help output instead. Go 1.12 is the last release that will
- include the <code>godoc</code> webserver; in Go 1.13 it will be available
- via <code>go</code> <code>get</code>.
-</p>
-
-<p><!-- CL 141977 -->
- <code>go</code> <code>doc</code> now supports the <code>-all</code> flag,
- which will cause it to print all exported APIs and their documentation,
- as the <code>godoc</code> command line used to do.
-</p>
-
-<p><!-- CL 140959 -->
- <code>go</code> <code>doc</code> also now includes the <code>-src</code> flag,
- which will show the target's source code.
-</p>
-
-<h3 id="trace">Trace</h3>
-
-<p><!-- CL 60790 -->
- The trace tool now supports plotting mutator utilization curves,
- including cross-references to the execution trace. These are useful
- for analyzing the impact of the garbage collector on application
- latency and throughput.
-</p>
-
-<h3 id="assembler">Assembler</h3>
-
-<p><!-- CL 147218 -->
- On <code>arm64</code>, the platform register was renamed from
- <code>R18</code> to <code>R18_PLATFORM</code> to prevent accidental
- use, as the OS could choose to reserve this register.
-</p>
-
-<h2 id="runtime">Runtime</h2>
-
-<p><!-- CL 138959 -->
- Go 1.12 significantly improves the performance of sweeping when a
- large fraction of the heap remains live. This reduces allocation
- latency immediately following a garbage collection.
-</p>
-
-<p><!-- CL 139719 -->
- The Go runtime now releases memory back to the operating system more
- aggressively, particularly in response to large allocations that
- can't reuse existing heap space.
-</p>
-
-<p><!-- CL 146342, CL 146340, CL 146345, CL 146339, CL 146343, CL 146337, CL 146341, CL 146338 -->
- The Go runtime's timer and deadline code is faster and scales better
- with higher numbers of CPUs. In particular, this improves the
- performance of manipulating network connection deadlines.
-</p>
-
-<p><!-- CL 135395 -->
- On Linux, the runtime now uses <code>MADV_FREE</code> to release unused
- memory. This is more efficient but may result in higher reported
- RSS. The kernel will reclaim the unused data when it is needed.
- To revert to the Go 1.11 behavior (<code>MADV_DONTNEED</code>), set the
- environment variable <code>GODEBUG=madvdontneed=1</code>.
-</p>
-
-<p><!-- CL 149578 -->
- Adding cpu.<em>extension</em>=off to the
- <a href="/doc/diagnostics.html#godebug">GODEBUG</a> environment
- variable now disables the use of optional CPU instruction
- set extensions in the standard library and runtime. This is not
- yet supported on Windows.
-</p>
-
-<p><!-- CL 158337 -->
- Go 1.12 improves the accuracy of memory profiles by fixing
- overcounting of large heap allocations.
-</p>
-
-<p><!-- CL 159717 -->
- Tracebacks, <code>runtime.Caller</code>,
- and <code>runtime.Callers</code> no longer include
- compiler-generated initialization functions. Doing a traceback
- during the initialization of a global variable will now show a
- function named <code>PKG.init.ializers</code>.
-</p>
-
-<h2 id="library">Core library</h2>
-
-<h3 id="tls_1_3">TLS 1.3</h3>
-
-<p>
- Go 1.12 adds opt-in support for TLS 1.3 in the <code>crypto/tls</code> package as
- specified by <a href="https://www.rfc-editor.org/info/rfc8446">RFC 8446</a>. It can
- be enabled by adding the value <code>tls13=1</code> to the <code>GODEBUG</code>
- environment variable. It will be enabled by default in Go 1.13.
-</p>
-
-<p>
- To negotiate TLS 1.3, make sure you do not set an explicit <code>MaxVersion</code> in
- <a href="/pkg/crypto/tls/#Config"><code>Config</code></a> and run your program with
- the environment variable <code>GODEBUG=tls13=1</code> set.
-</p>
-
-<p>
- All TLS 1.2 features except <code>TLSUnique</code> in
- <a href="/pkg/crypto/tls/#ConnectionState"><code>ConnectionState</code></a>
- and renegotiation are available in TLS 1.3 and provide equivalent or
- better security and performance. Note that even though TLS 1.3 is backwards
- compatible with previous versions, certain legacy systems might not work
- correctly when attempting to negotiate it. RSA certificate keys too small
- to be secure (including 512-bit keys) will not work with TLS 1.3.
-</p>
-
-<p>
- TLS 1.3 cipher suites are not configurable. All supported cipher suites are
- safe, and if <code>PreferServerCipherSuites</code> is set in
- <a href="/pkg/crypto/tls/#Config"><code>Config</code></a> the preference order
- is based on the available hardware.
-</p>
-
-<p>
- Early data (also called "0-RTT mode") is not currently supported as a
- client or server. Additionally, a Go 1.12 server does not support skipping
- unexpected early data if a client sends it. Since TLS 1.3 0-RTT mode
- involves clients keeping state regarding which servers support 0-RTT,
- a Go 1.12 server cannot be part of a load-balancing pool where some other
- servers do support 0-RTT. If switching a domain from a server that supported
- 0-RTT to a Go 1.12 server, 0-RTT would have to be disabled for at least the
- lifetime of the issued session tickets before the switch to ensure
- uninterrupted operation.
-</p>
-
-<p>
- In TLS 1.3 the client is the last one to speak in the handshake, so if it causes
- an error to occur on the server, it will be returned on the client by the first
- <a href="/pkg/crypto/tls/#Conn.Read"><code>Read</code></a>, not by
- <a href="/pkg/crypto/tls/#Conn.Handshake"><code>Handshake</code></a>. For
- example, that will be the case if the server rejects the client certificate.
- Similarly, session tickets are now post-handshake messages, so are only
- received by the client upon its first
- <a href="/pkg/crypto/tls/#Conn.Read"><code>Read</code></a>.
-</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>
-
-<!-- TODO: CL 115677: https://golang.org/cl/115677: cmd/vet: check embedded field tags too -->
-
-<dl id="bufio"><dt><a href="/pkg/bufio/">bufio</a></dt>
- <dd>
- <p><!-- CL 149297 -->
- <code>Reader</code>'s <a href="/pkg/bufio/#Reader.UnreadRune"><code>UnreadRune</code></a> and
- <a href="/pkg/bufio/#Reader.UnreadByte"><code>UnreadByte</code></a> methods will now return an error
- if they are called after <a href="/pkg/bufio/#Reader.Peek"><code>Peek</code></a>.
- </p>
-
-</dl><!-- bufio -->
-
-<dl id="bytes"><dt><a href="/pkg/bytes/">bytes</a></dt>
- <dd>
- <p><!-- CL 137855 -->
- The new function <a href="/pkg/bytes/#ReplaceAll"><code>ReplaceAll</code></a> returns a copy of
- a byte slice with all non-overlapping instances of a value replaced by another.
- </p>
-
- <p><!-- CL 145098 -->
- A pointer to a zero-value <a href="/pkg/bytes/#Reader"><code>Reader</code></a> is now
- functionally equivalent to <a href="/pkg/bytes/#NewReader"><code>NewReader</code></a><code>(nil)</code>.
- Prior to Go 1.12, the former could not be used as a substitute for the latter in all cases.
- </p>
-
-</dl><!-- bytes -->
-
-<dl id="crypto/rand"><dt><a href="/pkg/crypto/rand/">crypto/rand</a></dt>
- <dd>
- <p><!-- CL 139419 -->
- A warning will now be printed to standard error the first time
- <code>Reader.Read</code> is blocked for more than 60 seconds waiting
- to read entropy from the kernel.
- </p>
-
- <p><!-- CL 120055 -->
- On FreeBSD, <code>Reader</code> now uses the <code>getrandom</code>
- system call if available, <code>/dev/urandom</code> otherwise.
- </p>
-
-</dl><!-- crypto/rand -->
-
-<dl id="crypto/rc4"><dt><a href="/pkg/crypto/rc4/">crypto/rc4</a></dt>
- <dd>
- <p><!-- CL 130397 -->
- This release removes the assembly implementations, leaving only
- the pure Go version. The Go compiler generates code that is
- either slightly better or slightly worse, depending on the exact
- CPU. RC4 is insecure and should only be used for compatibility
- with legacy systems.
- </p>
-
-</dl><!-- crypto/rc4 -->
-
-<dl id="crypto/tls"><dt><a href="/pkg/crypto/tls/">crypto/tls</a></dt>
- <dd>
- <p><!-- CL 143177 -->
- If a client sends an initial message that does not look like TLS, the server
- will no longer reply with an alert, and it will expose the underlying
- <code>net.Conn</code> in the new field <code>Conn</code> of
- <a href="/pkg/crypto/tls/#RecordHeaderError"><code>RecordHeaderError</code></a>.
- </p>
-
-</dl><!-- crypto/tls -->
-
-<dl id="database/sql"><dt><a href="/pkg/database/sql/">database/sql</a></dt>
- <dd>
- <p><!-- CL 145738 -->
- A query cursor can now be obtained by passing a
- <a href="/pkg/database/sql/#Rows"><code>*Rows</code></a>
- value to the <a href="/pkg/database/sql/#Row.Scan"><code>Row.Scan</code></a> method.
- </p>
-
-</dl><!-- database/sql -->
-
-<dl id="expvar"><dt><a href="/pkg/expvar/">expvar</a></dt>
- <dd>
- <p><!-- CL 139537 -->
- The new <a href="/pkg/expvar/#Map.Delete"><code>Delete</code></a> method allows
- for deletion of key/value pairs from a <a href="/pkg/expvar/#Map"><code>Map</code></a>.
- </p>
-
-</dl><!-- expvar -->
-
-<dl id="fmt"><dt><a href="/pkg/fmt/">fmt</a></dt>
- <dd>
- <p><!-- CL 142737 -->
- Maps are now printed in key-sorted order to ease testing. The ordering rules are:
- <ul>
- <li>When applicable, nil compares low
- <li>ints, floats, and strings order by <
- <li>NaN compares less than non-NaN floats
- <li>bool compares false before true
- <li>Complex compares real, then imaginary
- <li>Pointers compare by machine address
- <li>Channel values compare by machine address
- <li>Structs compare each field in turn
- <li>Arrays compare each element in turn
- <li>Interface values compare first by <code>reflect.Type</code> describing the concrete type
- and then by concrete value as described in the previous rules.
- </ul>
- </p>
-
- <p><!-- CL 129777 -->
- When printing maps, non-reflexive key values like <code>NaN</code> were previously
- displayed as <code>&lt;nil&gt;</code>. As of this release, the correct values are printed.
- </p>
-
-</dl><!-- fmt -->
-
-<dl id="go/doc"><dt><a href="/pkg/go/doc/">go/doc</a></dt>
- <dd>
- <p><!-- CL 140958 -->
- To address some outstanding issues in <a href="/cmd/doc/"><code>cmd/doc</code></a>,
- this package has a new <a href="/pkg/go/doc/#Mode"><code>Mode</code></a> bit,
- <code>PreserveAST</code>, which controls whether AST data is cleared.
- </p>
-
-</dl><!-- go/doc -->
-
-<dl id="go/token"><dt><a href="/pkg/go/token/">go/token</a></dt>
- <dd>
- <p><!-- CL 134075 -->
- The <a href="/pkg/go/token#File"><code>File</code></a> type has a new
- <a href="/pkg/go/token#File.LineStart"><code>LineStart</code></a> field,
- which returns the position of the start of a given line. This is especially useful
- in programs that occasionally handle non-Go files, such as assembly, but wish to use
- the <code>token.Pos</code> mechanism to identify file positions.
- </p>
-
-</dl><!-- go/token -->
-
-<dl id="image"><dt><a href="/pkg/image/">image</a></dt>
- <dd>
- <p><!-- CL 118755 -->
- The <a href="/pkg/image/#RegisterFormat"><code>RegisterFormat</code></a> function is now safe for concurrent use.
- </p>
-
-</dl><!-- image -->
-
-<dl id="image/png"><dt><a href="/pkg/image/png/">image/png</a></dt>
- <dd>
- <p><!-- CL 134235 -->
- Paletted images with fewer than 16 colors now encode to smaller outputs.
- </p>
-
-</dl><!-- image/png -->
-
-<dl id="io"><dt><a href="/pkg/io/">io</a></dt>
- <dd>
- <p><!-- CL 139457 -->
- The new <a href="/pkg/io#StringWriter"><code>StringWriter</code></a> interface wraps the
- <a href="/pkg/io/#WriteString"><code>WriteString</code></a> function.
- </p>
-
-</dl><!-- io -->
-
-<dl id="math"><dt><a href="/pkg/math/">math</a></dt>
- <dd>
- <p><!-- CL 153059 -->
- The functions
- <a href="/pkg/math/#Sin"><code>Sin</code></a>,
- <a href="/pkg/math/#Cos"><code>Cos</code></a>,
- <a href="/pkg/math/#Tan"><code>Tan</code></a>,
- and <a href="/pkg/math/#Sincos"><code>Sincos</code></a> now
- apply Payne-Hanek range reduction to huge arguments. This
- produces more accurate answers, but they will not be bit-for-bit
- identical with the results in earlier releases.
- </p>
-</dl><!-- math -->
-
-<dl id="math/bits"><dt><a href="/pkg/math/bits/">math/bits</a></dt>
- <dd>
- <p><!-- CL 123157 -->
- New extended precision operations <a href="/pkg/math/bits/#Add"><code>Add</code></a>, <a href="/pkg/math/bits/#Sub"><code>Sub</code></a>, <a href="/pkg/math/bits/#Mul"><code>Mul</code></a>, and <a href="/pkg/math/bits/#Div"><code>Div</code></a> are available in <code>uint</code>, <code>uint32</code>, and <code>uint64</code> versions.
- </p>
-
-</dl><!-- math/bits -->
-
-<dl id="net"><dt><a href="/pkg/net/">net</a></dt>
- <dd>
- <p><!-- CL 146659 -->
- The
- <a href="/pkg/net/#Dialer.DualStack"><code>Dialer.DualStack</code></a> setting is now ignored and deprecated;
- RFC 6555 Fast Fallback ("Happy Eyeballs") is now enabled by default. To disable, set
- <a href="/pkg/net/#Dialer.FallbackDelay"><code>Dialer.FallbackDelay</code></a> to a negative value.
- </p>
-
- <p><!-- CL 107196 -->
- Similarly, TCP keep-alives are now enabled by default if
- <a href="/pkg/net/#Dialer.KeepAlive"><code>Dialer.KeepAlive</code></a> is zero.
- To disable, set it to a negative value.
- </p>
-
- <p><!-- CL 113997 -->
- On Linux, the <a href="http://man7.org/linux/man-pages/man2/splice.2.html"><code>splice</code> system call</a> is now used when copying from a
- <a href="/pkg/net/#UnixConn"><code>UnixConn</code></a> to a
- <a href="/pkg/net/#TCPConn"><code>TCPConn</code></a>.
- </p>
-</dl><!-- net -->
-
-<dl id="net/http"><dt><a href="/pkg/net/http/">net/http</a></dt>
- <dd>
- <p><!-- CL 143177 -->
- The HTTP server now rejects misdirected HTTP requests to HTTPS servers with a plaintext "400 Bad Request" response.
- </p>
-
- <p><!-- CL 130115 -->
- The new <a href="/pkg/net/http/#Client.CloseIdleConnections"><code>Client.CloseIdleConnections</code></a>
- method calls the <code>Client</code>'s underlying <code>Transport</code>'s <code>CloseIdleConnections</code>
- if it has one.
- </p>
-
- <p><!-- CL 145398 -->
- The <a href="/pkg/net/http/#Transport"><code>Transport</code></a> no longer rejects HTTP responses which declare
- HTTP Trailers but don't use chunked encoding. Instead, the declared trailers are now just ignored.
- </p>
-
- <p><!-- CL 152080 --> <!-- CL 151857 -->
- The <a href="/pkg/net/http/#Transport"><code>Transport</code></a> no longer handles <code>MAX_CONCURRENT_STREAMS</code> values
- advertised from HTTP/2 servers as strictly as it did during Go 1.10 and Go 1.11. The default behavior is now back
- to how it was in Go 1.9: each connection to a server can have up to <code>MAX_CONCURRENT_STREAMS</code> requests
- active and then new TCP connections are created as needed. In Go 1.10 and Go 1.11 the <code>http2</code> package
- would block and wait for requests to finish instead of creating new connections.
- To get the stricter behavior back, import the
- <a href="https://godoc.org/golang.org/x/net/http2"><code>golang.org/x/net/http2</code></a> package
- directly and set
- <a href="https://godoc.org/golang.org/x/net/http2#Transport.StrictMaxConcurrentStreams"><code>Transport.StrictMaxConcurrentStreams</code></a> to
- <code>true</code>.
- </p>
-
-</dl><!-- net/http -->
-
-<dl id="net/url"><dt><a href="/pkg/net/url/">net/url</a></dt>
- <dd>
- <p><!-- CL 159157, CL 160178 -->
- <a href="/pkg/net/url/#Parse"><code>Parse</code></a>,
- <a href="/pkg/net/url/#ParseRequestURI"><code>ParseRequestURI</code></a>,
- and
- <a href="/pkg/net/url/#URL.Parse"><code>URL.Parse</code></a>
- now return an
- error for URLs containing ASCII control characters, which includes NULL,
- tab, and newlines.
- </p>
-
-</dl><!-- net/url -->
-
-<dl id="net/http/httputil"><dt><a href="/pkg/net/http/httputil/">net/http/httputil</a></dt>
- <dd>
- <p><!-- CL 146437 -->
- The <a href="/pkg/net/http/httputil/#ReverseProxy"><code>ReverseProxy</code></a> now automatically
- proxies WebSocket requests.
- </p>
-
-</dl><!-- net/http/httputil -->
-
-<dl id="os"><dt><a href="/pkg/os/">os</a></dt>
- <dd>
- <p><!-- CL 125443 -->
- The new <a href="/pkg/os/#ProcessState.ExitCode"><code>ProcessState.ExitCode</code></a> method
- returns the process's exit code.
- </p>
-
- <p><!-- CL 135075 -->
- <code>ModeCharDevice</code> has been added to the <code>ModeType</code> bitmask, allowing for
- <code>ModeDevice | ModeCharDevice</code> to be recovered when masking a
- <a href="/pkg/os/#FileMode"><code>FileMode</code></a> with <code>ModeType</code>.
- </p>
-
- <p><!-- CL 139418 -->
- The new function <a href="/pkg/os/#UserHomeDir"><code>UserHomeDir</code></a> returns the
- current user's home directory.
- </p>
-
- <p><!-- CL 146020 -->
- <a href="/pkg/os/#RemoveAll"><code>RemoveAll</code></a> now supports paths longer than 4096 characters
- on most Unix systems.
- </p>
-
- <p><!-- CL 130676 -->
- <a href="/pkg/os/#File.Sync"><code>File.Sync</code></a> now uses <code>F_FULLFSYNC</code> on macOS
- to correctly flush the file contents to permanent storage.
- This may cause the method to run more slowly than in previous releases.
- </p>
-
- <p><!--CL 155517 -->
- <a href="/pkg/os/#File"><code>File</code></a> now supports
- a <a href="/pkg/os/#File.SyscallConn"><code>SyscallConn</code></a>
- method returning
- a <a href="/pkg/syscall/#RawConn"><code>syscall.RawConn</code></a>
- interface value. This may be used to invoke system-specific
- operations on the underlying file descriptor.
- </p>
-
-</dl><!-- os -->
-
-<dl id="path/filepath"><dt><a href="/pkg/path/filepath/">path/filepath</a></dt>
- <dd>
- <p><!-- CL 145220 -->
- The <a href="/pkg/path/filepath/#IsAbs"><code>IsAbs</code></a> function now returns true when passed
- a reserved filename on Windows such as <code>NUL</code>.
- <a href="https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file#naming-conventions">List of reserved names.</a>
- </p>
-
-</dl><!-- path/filepath -->
-
-<dl id="reflect"><dt><a href="/pkg/reflect/">reflect</a></dt>
- <dd>
- <p><!-- CL 33572 -->
- A new <a href="/pkg/reflect#MapIter"><code>MapIter</code></a> type is
- an iterator for ranging over a map. This type is exposed through the
- <a href="/pkg/reflect#Value"><code>Value</code></a> type's new
- <a href="/pkg/reflect#Value.MapRange"><code>MapRange</code></a> method.
- This follows the same iteration semantics as a range statement, with <code>Next</code>
- to advance the iterator, and <code>Key</code>/<code>Value</code> to access each entry.
- </p>
-
-</dl><!-- reflect -->
-
-<dl id="regexp"><dt><a href="/pkg/regexp/">regexp</a></dt>
- <dd>
- <p><!-- CL 139784 -->
- <a href="/pkg/regexp/#Regexp.Copy"><code>Copy</code></a> is no longer necessary
- to avoid lock contention, so it has been given a partial deprecation comment.
- <a href="/pkg/regexp/#Regexp.Copy"><code>Copy</code></a>
- may still be appropriate if the reason for its use is to make two copies with
- different <a href="/pkg/regexp/#Regexp.Longest"><code>Longest</code></a> settings.
- </p>
-
-</dl><!-- regexp -->
-
-<dl id="runtime/debug"><dt><a href="/pkg/runtime/debug/">runtime/debug</a></dt>
- <dd>
- <p><!-- CL 144220 -->
- A new <a href="/pkg/runtime/debug/#BuildInfo"><code>BuildInfo</code></a> type
- exposes the build information read from the running binary, available only in
- binaries built with module support. This includes the main package path, main
- module information, and the module dependencies. This type is given through the
- <a href="/pkg/runtime/debug/#ReadBuildInfo"><code>ReadBuildInfo</code></a> function
- on <a href="/pkg/runtime/debug/#BuildInfo"><code>BuildInfo</code></a>.
- </p>
-
-</dl><!-- runtime/debug -->
-
-<dl id="strings"><dt><a href="/pkg/strings/">strings</a></dt>
- <dd>
- <p><!-- CL 137855 -->
- The new function <a href="/pkg/strings/#ReplaceAll"><code>ReplaceAll</code></a> returns a copy of
- a string with all non-overlapping instances of a value replaced by another.
- </p>
-
- <p><!-- CL 145098 -->
- A pointer to a zero-value <a href="/pkg/strings/#Reader"><code>Reader</code></a> is now
- functionally equivalent to <a href="/pkg/strings/#NewReader"><code>NewReader</code></a><code>(nil)</code>.
- Prior to Go 1.12, the former could not be used as a substitute for the latter in all cases.
- </p>
-
- <p><!-- CL 122835 -->
- The new <a href="/pkg/strings/#Builder.Cap"><code>Builder.Cap</code></a> method returns the capacity of the builder's underlying byte slice.
- </p>
-
- <p><!-- CL 131495 -->
- The character mapping functions <a href="/pkg/strings/#Map"><code>Map</code></a>,
- <a href="/pkg/strings/#Title"><code>Title</code></a>,
- <a href="/pkg/strings/#ToLower"><code>ToLower</code></a>,
- <a href="/pkg/strings/#ToLowerSpecial"><code>ToLowerSpecial</code></a>,
- <a href="/pkg/strings/#ToTitle"><code>ToTitle</code></a>,
- <a href="/pkg/strings/#ToTitleSpecial"><code>ToTitleSpecial</code></a>,
- <a href="/pkg/strings/#ToUpper"><code>ToUpper</code></a>, and
- <a href="/pkg/strings/#ToUpperSpecial"><code>ToUpperSpecial</code></a>
- now always guarantee to return valid UTF-8. In earlier releases, if the input was invalid UTF-8 but no character replacements
- needed to be applied, these routines incorrectly returned the invalid UTF-8 unmodified.
- </p>
-
-</dl><!-- strings -->
-
-<dl id="syscall"><dt><a href="/pkg/syscall/">syscall</a></dt>
- <dd>
- <p><!-- CL 138595 -->
- 64-bit inodes are now supported on FreeBSD 12. Some types have been adjusted accordingly.
- </p>
-
- <p><!-- CL 125456 -->
- The Unix socket
- (<a href="https://blogs.msdn.microsoft.com/commandline/2017/12/19/af_unix-comes-to-windows/"><code>AF_UNIX</code></a>)
- address family is now supported for compatible versions of Windows.
- </p>
-
- <p><!-- CL 147117 -->
- The new function <a href="/pkg/syscall/?GOOS=windows&GOARCH=amd64#Syscall18"><code>Syscall18</code></a>
- has been introduced for Windows, allowing for calls with up to 18 arguments.
- </p>
-
-</dl><!-- syscall -->
-
-<dl id="syscall/js"><dt><a href="/pkg/syscall/js/">syscall/js</a></dt>
- <dd>
- <p><!-- CL 153559 -->
- <p>
- The <code>Callback</code> type and <code>NewCallback</code> function have been renamed;
- they are now called
- <a href="/pkg/syscall/js/?GOOS=js&GOARCH=wasm#Func"><code>Func</code></a> and
- <a href="/pkg/syscall/js/?GOOS=js&GOARCH=wasm#FuncOf"><code>FuncOf</code></a>, respectively.
- This is a breaking change, but WebAssembly support is still experimental
- and not yet subject to the
- <a href="/doc/go1compat">Go 1 compatibility promise</a>. Any code using the
- old names will need to be updated.
- </p>
-
- <p><!-- CL 141644 -->
- If a type implements the new
- <a href="/pkg/syscall/js/?GOOS=js&GOARCH=wasm#Wrapper"><code>Wrapper</code></a>
- interface,
- <a href="/pkg/syscall/js/?GOOS=js&GOARCH=wasm#ValueOf"><code>ValueOf</code></a>
- will use it to return the JavaScript value for that type.
- </p>
-
- <p><!-- CL 143137 -->
- The meaning of the zero
- <a href="/pkg/syscall/js/?GOOS=js&GOARCH=wasm#Value"><code>Value</code></a>
- has changed. It now represents the JavaScript <code>undefined</code> value
- instead of the number zero.
- This is a breaking change, but WebAssembly support is still experimental
- and not yet subject to the
- <a href="/doc/go1compat">Go 1 compatibility promise</a>. Any code relying on
- the zero <a href="/pkg/syscall/js/?GOOS=js&GOARCH=wasm#Value"><code>Value</code></a>
- to mean the number zero will need to be updated.
- </p>
-
- <p><!-- CL 144384 -->
- The new
- <a href="/pkg/syscall/js/?GOOS=js&GOARCH=wasm#Value.Truthy"><code>Value.Truthy</code></a>
- method reports the
- <a href="https://developer.mozilla.org/en-US/docs/Glossary/Truthy">JavaScript "truthiness"</a>
- of a given value.
- </p>
-
-</dl><!-- syscall/js -->
-
-<dl id="testing"><dt><a href="/pkg/testing/">testing</a></dt>
- <dd>
- <p><!-- CL 139258 -->
- The <a href="/cmd/go/#hdr-Testing_flags"><code>-benchtime</code></a> flag now supports setting an explicit iteration count instead of a time when the value ends with an "<code>x</code>". For example, <code>-benchtime=100x</code> runs the benchmark 100 times.
- </p>
-
-</dl><!-- testing -->
-
-<dl id="text/template"><dt><a href="/pkg/text/template/">text/template</a></dt>
- <dd>
- <p><!-- CL 142217 -->
- When executing a template, long context values are no longer truncated in errors.
- </p>
- <p>
- <code>executing "tmpl" at <.very.deep.context.v...>: map has no entry for key "notpresent"</code>
- </p>
- <p>
- is now
- </p>
- <p>
- <code>executing "tmpl" at <.very.deep.context.value.notpresent>: map has no entry for key "notpresent"</code>
- </p>
-
- <dd>
- <p><!-- CL 143097 -->
- If a user-defined function called by a template panics, the
- panic is now caught and returned as an error by
- the <code>Execute</code> or <code>ExecuteTemplate</code> method.
- </p>
-</dl><!-- text/template -->
-
-<dl id="time"><dt><a href="/pkg/time/">time</a></dt>
- <dd>
- <p><!-- CL 151299 -->
- The time zone database in <code>$GOROOT/lib/time/zoneinfo.zip</code>
- has been updated to version 2018i. Note that this ZIP file is
- only used if a time zone database is not provided by the operating
- system.
- </p>
-
-</dl><!-- time -->
-
-<dl id="unsafe"><dt><a href="/pkg/unsafe/">unsafe</a></dt>
- <dd>
- <p><!-- CL 146058 -->
- It is invalid to convert a nil <code>unsafe.Pointer</code> to <code>uintptr</code> and back with arithmetic.
- (This was already invalid, but will now cause the compiler to misbehave.)
- </p>
-
-</dl><!-- unsafe -->