<!--{
	"Title": "Go 1.17 Release Notes",
	"Path":  "/doc/go1.17"
}-->

<!--
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.17</h2>

<p>
  <strong>
    Go 1.17 is not yet released. These are work-in-progress
    release notes. Go 1.17 is expected to be released in August 2021.
  </strong>
</p>

<h2 id="language">Changes to the language</h2>

<p>
  Go 1.17 includes three small enhancements to the language.
</p>

<ul>
  <li><!-- CL 216424; issue 395 -->
    <a href="/ref/spec#Conversions_from_slice_to_array_pointer">Conversions
    from slice to array pointer</a>: An expression <code>s</code> of
    type <code>[]T</code> may now be converted to array pointer type
    <code>*[N]T</code>. If <code>a</code> is the result of such a
    conversion, then corresponding indices that are in range refer to
    the same underlying elements: <code>&amp;a[i] == &amp;s[i]</code>
    for <code>0 &lt;= i &lt; N</code>. The conversion panics if
    <code>len(s)</code> is less than <code>N</code>.
  </li>

  <li><!-- CL 312212; issue 40481 -->
    <a href="/pkg/unsafe#Add"><code>unsafe.Add</code></a>:
    <code>unsafe.Add(ptr, len)</code> adds <code>len</code>
    to <code>ptr</code> and returns the updated pointer
    <code>unsafe.Pointer(uintptr(ptr) + uintptr(len))</code>.
  </li>

  <li><!-- CL 312212; issue 19367 -->
    <a href="/pkg/unsafe#Slice"><code>unsafe.Slice</code></a>:
    For expression <code>ptr</code> of type <code>*T</code>,
    <code>unsafe.Slice(ptr, len)</code> returns a slice of
    type <code>[]T</code> whose underlying array starts
    at <code>ptr</code> and whose length and capacity
    are <code>len</code>.
  </li>
</ul>

<p>
  The package unsafe enhancements were added to simplify writing code that conforms
  to <code>unsafe.Pointer</code>'s <a href="/pkg/unsafe/#Pointer">safety
  rules</a>, but the rules remain unchanged. In particular, existing
  programs that correctly use <code>unsafe.Pointer</code> remain
  valid, and new programs must still follow the rules when
  using <code>unsafe.Add</code> or <code>unsafe.Slice</code>.
</p>


<p>
  Note that the new conversion from slice to array pointer is the
  first case in which a type conversion can panic at run time.
  Analysis tools that assume type conversions can never panic
  should be updated to consider this possibility.
</p>

<h2 id="ports">Ports</h2>

<h3 id="darwin">Darwin</h3>

<p><!-- golang.org/issue/23011 -->
  As <a href="go1.16#darwin">announced</a> in the Go 1.16 release
  notes, Go 1.17 requires macOS 10.13 High Sierra or later; support
  for previous versions has been discontinued.
</p>

<h3 id="windows">Windows</h3>

<p><!-- golang.org/issue/36439 -->
  Go 1.17 adds support of 64-bit ARM architecture on Windows (the
  <code>windows/arm64</code> port). This port supports cgo.
</p>

<h3 id="openbsd">OpenBSD</h3>

<p><!-- golang.org/issue/43005 -->
  The 64-bit MIPS architecture on OpenBSD (the <code>openbsd/mips64</code>
  port) now supports cgo.
</p>

<p><!-- golang.org/issue/36435 -->
  In Go 1.16, on the 64-bit x86 and 64-bit ARM architectures on
  OpenBSD (the <code>openbsd/amd64</code> and <code>openbsd/arm64</code>
  ports) system calls are made through <code>libc</code>, instead
  of directly using machine instructions. In Go 1.17, this is also
  done on the 32-bit x86 and 32-bit ARM architectures on OpenBSD
  (the <code>openbsd/386</code> and <code>openbsd/arm</code> ports).
  This ensures compatibility with OpenBSD 6.9 onwards, which require
  system calls to be made through <code>libc</code> for non-static
  Go binaries.
</p>

<h3 id="arm64">ARM64</h3>

<p><!-- CL 288814 -->
  Go programs now maintain stack frame pointers on the 64-bit ARM
  architecture on all operating systems. Previously it maintained
  stack frame pointers only on Linux, macOS, and iOS.
</p>

<h2 id="tools">Tools</h2>

<h3 id="go-command">Go command</h3>

<h4 id="lazy-loading">Lazy module loading</h4>

<p><!-- golang.org/issue/36460 -->
  If a module specifies <code>go</code> <code>1.17</code> or higher in its
  <code>go.mod</code> file, its transitive requirements are now loaded lazily,
  avoiding the need to download or read <code>go.mod</code> files for
  otherwise-irrelevant dependencies. To support lazy loading, in Go 1.17 modules
  the <code>go</code> command maintains <em>explicit</em> requirements in
  the <code>go.mod</code> file for every dependency that provides any package
  transitively imported by any package or test within the module.
  See <a href="https://golang.org/design/36460-lazy-module-loading">the design
  document</a> for more detail.
  <!-- TODO(bcmills): replace the design-doc link with proper documentation. -->
</p>

<p><!-- golang.org/issue/45965 -->
  Because the number of additional explicit requirements in the go.mod file may
  be substantial, in a Go 1.17 module the newly-added requirements
  on <em>indirect</em> dependencies are maintained in a
  separate <code>require</code> block from the block containing direct
  dependencies.
</p>

<p><!-- golang.org/issue/45094 -->
  To facilitate the upgrade to lazy loading, the
  <code>go</code> <code>mod</code> <code>tidy</code> subcommand now supports
  a <code>-go</code> flag to set or change the <code>go</code> version in
  the <code>go.mod</code> file. To enable lazy loading for an existing module
  without changing the selected versions of its dependencies, run:
</p>

<pre>
  go mod tidy -go=1.17
</pre>

<p><!-- golang.org/issue/46141 -->
  By default, <code>go</code> <code>mod</code> <code>tidy</code> verifies that
  the selected versions of dependencies relevant to the main module are the same
  versions that would be used by the prior Go release (Go 1.16 for a module that
  specifies <code>go</code> <code>1.17</code>), and preserves
  the <code>go.sum</code> entries needed by that release even for dependencies
  that are not normally needed by other commands.
</p>

<p>
  The <code>-compat</code> flag allows that version to be overridden to support
  older (or only newer) versions, up to the version specified by
  the <code>go</code> directive in the <code>go.mod</code> file. To tidy
  a <code>go</code> <code>1.17</code> module for Go 1.17 only, without saving
  checksums for (or checking for consistency with) Go 1.16:
</p>

<pre>
  go mod tidy -compat=1.17
</pre>

<p>
  Note that even if the main module is tidied with <code>-compat=1.17</code>,
  users who <code>require</code> the module from a
  <code>go</code> <code>1.16</code> or earlier module will still be able to
  use it, provided that the packages use only compatible language and library
  features.
</p>

<h4 id="module-deprecation-comments">Module deprecation comments</h4>

<p><!-- golang.org/issue/40357 -->
  Module authors may deprecate a module by adding a
  <a href="/ref/mod#go-mod-file-module-deprecation"><code>// Deprecated:</code>
  comment</a> to <code>go.mod</code>, then tagging a new version.
  <code>go</code> <code>get</code> now prints a warning if a module needed to
  build packages named on the command line is deprecated. <code>go</code>
  <code>list</code> <code>-m</code> <code>-u</code> prints deprecations for all
  dependencies (use <code>-f</code> or <code>-json</code> to show the full
  message). The <code>go</code> command considers different major versions to
  be distinct modules, so this mechanism may be used, for example, to provide
  users with migration instructions for a new major version.
</p>

<h4 id="go-get"><code>go</code> <code>get</code></h4>

<p><!-- golang.org/issue/37519 -->
  The <code>go</code> <code>get</code> <code>-insecure</code> flag is
  deprecated and has been removed. To permit the use of insecure schemes
  when fetching dependencies, please use the <code>GOINSECURE</code>
  environment variable. The <code>-insecure</code> flag also bypassed module
  sum validation, use <code>GOPRIVATE</code> or <code>GONOSUMDB</code> if
  you need that functionality. See <code>go</code> <code>help</code>
  <code>environment</code> for details.
</p>

<p><!-- golang.org/issue/43684 -->
  <code>go</code> <code>get</code> prints a deprecation warning when installing
  commands outside the main module (without the <code>-d</code> flag).
  <code>go</code> <code>install</code> <code>cmd@version</code> should be used
  instead to install a command at a specific version, using a suffix like
  <code>@latest</code> or <code>@v1.2.3</code>. In Go 1.18, the <code>-d</code>
  flag will always be enabled, and <code>go</code> <code>get</code> will only
  be used to change dependencies in <code>go.mod</code>.
</p>

<h4 id="missing-go-directive"><code>go.mod</code> files missing <code>go</code> directives</h4>

<p><!-- golang.org/issue/44976 -->
  If the main module's <code>go.mod</code> file does not contain
  a <a href="/doc/modules/gomod-ref#go"><code>go</code> directive</a> and
  the <code>go</code> command cannot update the <code>go.mod</code> file, the
  <code>go</code> command now assumes <code>go 1.11</code> instead of the
  current release. (<code>go</code> <code>mod</code> <code>init</code> has added
  <code>go</code> directives automatically <a href="/doc/go1.12#modules">since
  Go 1.12</a>.)
</p>

<p><!-- golang.org/issue/44976 -->
  If a module dependency lacks an explicit <code>go.mod</code> file, or
  its <code>go.mod</code> file does not contain
  a <a href="/doc/modules/gomod-ref#go"><code>go</code> directive</a>,
  the <code>go</code> command now assumes <code>go 1.16</code> for that
  dependency instead of the current release. (Dependencies developed in GOPATH
  mode may lack a <code>go.mod</code> file, and
  the <code>vendor/modules.txt</code> has to date never recorded
  the <code>go</code> versions indicated by dependencies' <code>go.mod</code>
  files.)
</p>

<h4 id="vendor"><code>vendor</code> contents</h4>

<p><!-- golang.org/issue/36876 -->
  If the main module specifies <code>go</code> <code>1.17</code> or higher,
  <code>go</code> <code>mod</code> <code>vendor</code> now annotates
  <code>vendor/modules.txt</code> with the <code>go</code> version indicated by
  each vendored module in its own <code>go.mod</code> file. The annotated
  version is used when building the module's packages from vendored source code.
</p>

<p><!-- golang.org/issue/42970 -->
  If the main module specifies <code>go</code> <code>1.17</code> or higher,
  <code>go</code> <code>mod</code> <code>vendor</code> now omits <code>go.mod</code>
  and <code>go.sum</code> files for vendored dependencies, which can otherwise
  interfere with the ability of the <code>go</code> command to identify the correct
  module root when invoked within the <code>vendor</code> tree.
</p>

<h4 id="password-prompts">Password prompts</h4>

<p><!-- golang.org/issue/44904 -->
  The <code>go</code> command by default now suppresses SSH password prompts and
  Git Credential Manager prompts when fetching Git repositories using SSH, as it
  already did previously for other Git password prompts. Users authenticating to
  private Git repos with password-protected SSH may configure
  an <code>ssh-agent</code> to enable the <code>go</code> command to use
  password-protected SSH keys.
</p>

<h4 id="go-mod-download"><code>go</code> <code>mod</code> <code>download</code></h4>

<p><!-- golang.org/issue/45332 -->
  When <code>go</code> <code>mod</code> <code>download</code> is invoked without
  arguments, it will no longer save sums for downloaded module content to
  <code>go.sum</code>. It may still make changes to <code>go.mod</code> and
  <code>go.sum</code> needed to load the build list. This is the same as the
  behavior in Go 1.15. To save sums for all modules, use <code>go</code>
  <code>mod</code> <code>download</code> <code>all</code>.
</p>

<h4 id="build-lines"><code>//go:build</code> lines</h4>

<p>
  The <code>go</code> command now understands <code>//go:build</code> lines
  and prefers them over <code>// +build</code> lines. The new syntax uses
  boolean expressions, just like Go, and should be less error-prone.
  As of this release, the new syntax is fully supported, and all Go files
  should be updated to have both forms with the same meaning. To aid in
  migration, <a href="#gofmt"><code>gofmt</code></a> now automatically
  synchronizes the two forms. For more details on the syntax and migration plan,
  see
  <a href="https://golang.org/design/draft-gobuild">https://golang.org/design/draft-gobuild</a>.
</p>

<h4 id="go run"><code>go</code> <code>run</code></h4>

<p><!-- golang.org/issue/42088 -->
  <code>go</code> <code>run</code> now accepts arguments with version suffixes
  (for example, <code>go</code> <code>run</code>
  <code>example.com/cmd@v1.0.0</code>).  This causes <code>go</code>
  <code>run</code> to build and run packages in module-aware mode, ignoring the
  <code>go.mod</code> file in the current directory or any parent directory, if
  there is one. This is useful for running executables without installing them or
  without changing dependencies of the current module.
</p>

<h3 id="gofmt">Gofmt</h3>

<p>
  <code>gofmt</code> (and <code>go</code> <code>fmt</code>) now synchronizes
  <code>//go:build</code> lines with <code>// +build</code> lines. If a file
  only has <code>// +build</code> lines, they will be moved to the appropriate
  location in the file, and matching <code>//go:build</code> lines will be
  added. Otherwise, <code>// +build</code> lines will be overwritten based on
  any existing <code>//go:build</code> lines. For more information, see
  <a href="https://golang.org/design/draft-gobuild">https://golang.org/design/draft-gobuild</a>.
</p>

<h3 id="vet">Vet</h3>

<h4 id="vet-buildtags">New warning for mismatched <code>//go:build</code> and <code>// +build</code> lines</h4>

<p><!-- CL 240609 -->
  The <code>vet</code> tool now verifies that <code>//go:build</code> and
  <code>// +build</code> lines are in the correct part of the file and
  synchronized with each other. If they aren't,
  <a href="#gofmt"><code>gofmt</code></a> can be used to fix them. For more
  information, see
  <a href="https://golang.org/design/draft-gobuild">https://golang.org/design/draft-gobuild</a>.
</p>

<h4 id="vet-sigchanyzer">New warning for calling <code>signal.Notify</code> on unbuffered channels</h4>

<p><!-- CL 299532 -->
  The vet tool now warns about calls to <a href="/pkg/os/signal/#Notify">signal.Notify</a>
  with incoming signals being sent to an unbuffered channel. Using an unbuffered channel
  risks missing signals sent on them as <code>signal.Notify</code> does not block when
  sending to a channel. For example:
</p>

<pre>
c := make(chan os.Signal)
// signals are sent on c before the channel is read from.
// This signal may be dropped as c is unbuffered.
signal.Notify(c, os.Interrupt)
</pre>

<p>
  Users of <code>signal.Notify</code> should use channels with sufficient buffer space to keep up with the
  expected signal rate.
</p>

<h4 id="vet-error-stdmethods">New warnings for Is, As and Unwrap methods</h4>

<p><!-- CL 321389 -->
  The vet tool now warns about methods named <code>As</code>, <code>Is</code> or <code>Unwrap</code>
  on types implementing the <code>error</code> interface that have a different signature than the
  one expected by the <code>errors</code> package. The <code>errors.{As,Is,Unwrap}</code> functions
  expect such methods to implement either <code>Is(error)</code> <code>bool</code>,
  <code>As(interface{})</code> <code>bool</code>, or <code>Unwrap()</code> <code>error</code>
  respectively. The functions <code>errors.{As,Is,Unwrap}</code> will ignore methods with the same
  names but a different signature. For example:
</p>

<pre>
type MyError struct { hint string }
func (m MyError) Error() string { ... } // MyError implements error.
func (MyError) Is(target interface{}) bool { ... } // target is interface{} instead of error.
func Foo() bool {
	x, y := MyError{"A"}, MyError{"B"}
	return errors.Is(x, y) // returns false as x != y and MyError does not have an `Is(error) bool` function.
}
</pre>

<h3 id="cover">Cover</h3>

<p><!-- CL 249759 -->
  The <code>cover</code> tool now uses an optimized parser
  from <code>golang.org/x/tools/cover</code>, which may be noticeably faster
  when parsing large coverage profiles.
</p>

<h2 id="compiler">Compiler</h2>

<p><!-- golang.org/issue/40724 -->
  Go 1.17 implements a new way of passing function arguments and results using
  registers instead of the stack. This work is enabled for Linux, MacOS, and
  Windows on the 64-bit x86 architecture (the <code>linux/amd64</code>,
  <code>darwin/amd64</code>, <code>windows/amd64</code> ports). For a
  representative set of Go packages and programs, benchmarking has shown
  performance improvements of about 5%, and a typical reduction in binary size
  of about 2%.
</p>

<p>
  This change does not affect the functionality of any safe Go code. It can affect
  code outside the <a href="/doc/go1compat">compatibility guidelines</a> with
  minimal impact. To maintain compatibility with existing assembly functions,
  adapter functions converting between the new register-based calling convention
  and the previous stack-based calling convention (also known as ABI wrappers)
  are sometimes used. This is mostly invisible to users, except for assembly
  functions that have their addresses taken in Go. Using <code>reflect.ValueOf(fn).Pointer()</code>
  (or similar approaches such as via <code>unsafe.Pointer</code>) to get the address
  of an assembly function will now return the address of the ABI wrapper. This is
  mostly harmless, except for special-purpose assembly code (such as accessing
  thread-local storage or requiring a special stack alignment). Assembly functions
  called indirectly from Go via <code>func</code> values will now be made through
  ABI wrappers, which may cause a very small performance overhead. Also, calling
  Go functions from assembly may now go through ABI wrappers, with a very small
  performance overhead.
</p>

<p><!-- CL 304470 -->
  The format of stack traces from the runtime (printed when an uncaught panic
  occurs, or when <code>runtime.Stack</code> is called) is improved. Previously,
  the function arguments were printed as hexadecimal words based on the memory
  layout. Now each argument in the source code is printed separately, separated
  by commas. Aggregate-typed (struct, array, string, slice, interface, and complex)
  arguments are delimited by curly braces. A caveat is that the value of an
  argument that only lives in a register and is not stored to memory may be
  inaccurate. Function return values (which were usually inaccurate) are no longer
  printed.
</p>

<p><!-- CL 283112, golang.org/issue/28727 -->
  Functions containing closures can now be inlined. One effect of this change is
  that a function with a closure may actually produce a distinct closure function
  for each place that the function is inlined. Hence, this change could reveal
  bugs where Go functions are compared (incorrectly) by pointer value. Go
  functions are by definition not comparable.
</p>

<h2 id="library">Core library</h2>

<h3 id="runtime/cgo"><a href="/pkg/runtime/cgo">Cgo</a></h3>

<p>
  The <a href="/pkg/runtime/cgo">runtime/cgo</a> package now provides a
  new facility that allows to turn any Go values to a safe representation
  that can be used to pass values between C and Go safely. See
  <a href="/pkg/runtime/cgo#Handle">runtime/cgo.Handle</a> for more information.
</p>

<h3 id="semicolons">URL query parsing</h3>
<!-- CL 325697, CL 326309 -->

<p>
  The <code>net/url</code> and <code>net/http</code> packages used to accept
  <code>";"</code> (semicolon) as a setting separator in URL queries, in
  addition to <code>"&"</code> (ampersand). Now, settings with non-percent-encoded
  semicolons are rejected and <code>net/http</code> servers will log a warning to
  <a href="/pkg/net/http#Server.ErrorLog"><code>Server.ErrorLog</code></a>
  when encountering one in a request URL.
</p>

<p>
  For example, before Go 1.17 the <a href="/pkg/net/url#URL.Query"><code>Query</code></a>
  method of the URL <code>example?a=1;b=2&c=3</code> would have returned
  <code>map[a:[1] b:[2] c:[3]]</code>, while now it returns <code>map[c:[3]]</code>.
</p>

<p>
  When encountering such a query string,
  <a href="/pkg/net/url#URL.Query"><code>URL.Query</code></a>
  and
  <a href="/pkg/net/http#Request.FormValue"><code>Request.FormValue</code></a>
  ignore any settings that contain a semicolon,
  <a href="/pkg/net/url#ParseQuery"><code>ParseQuery</code></a>
  returns the remaining settings and an error, and
  <a href="/pkg/net/http#Request.ParseForm"><code>Request.ParseForm</code></a>
  and
  <a href="/pkg/net/http#Request.ParseMultipartForm"><code>Request.ParseMultipartForm</code></a>
  return an error but still set <code>Request</code> fields based on the
  remaining settings.
</p>

<p>
  <code>net/http</code> users can restore the original behavior by using the new
  <a href="/pkg/net/http#AllowQuerySemicolons"><code>AllowQuerySemicolons</code></a>
  handler wrapper. This will also suppress the <code>ErrorLog</code> warning.
  Note that accepting semicolons as query separators can lead to security issues
  if different systems interpret cache keys differently.
  See <a href="https://golang.org/issue/25192">issue 25192</a> for more information.
</p>

<h3 id="ALPN">TLS strict ALPN</h3>
<!-- CL 289209, CL 325432 -->

<p>
  When <a href="/pkg/crypto/tls#Config.NextProtos"><code>Config.NextProtos</code></a>
  is set, servers now enforce that there is an overlap between the configured
  protocols and the ALPN protocols advertised by the client, if any. If there is
  no mutually supported protocol, the connection is closed with the
  <code>no_application_protocol</code> alert, as required by RFC 7301. This
  helps mitigate <a href="https://alpaca-attack.com/">the ALPACA cross-protocol attack</a>.
</p>

<p>
  As an exception, when the value <code>"h2"</code> is included in the server's
  <code>Config.NextProtos</code>, HTTP/1.1 clients will be allowed to connect as
  if they didn't support ALPN.
  See <a href="https://golang.org/issue/46310">issue 46310</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="archive/zip"><dt><a href="/pkg/archive/zip/">archive/zip</a></dt>
  <dd>
    <p><!-- CL 312310 -->
      The new methods <a href="/pkg/archive/zip#File.OpenRaw"><code>File.OpenRaw</code></a>, <a href="/pkg/archive/zip#Writer.CreateRaw"><code>Writer.CreateRaw</code></a>, <a href="/pkg/archive/zip#Writer.Copy"><code>Writer.Copy</code></a> provide support for cases where performance is a primary concern.
    </p>
  </dd>
</dl><!-- archive/zip -->

<dl id="bufio"><dt><a href="/pkg/bufio/">bufio</a></dt>
  <dd>
    <p><!-- CL 280492 -->
      The <a href="/pkg/bufio/#Writer.WriteRune"><code>Writer.WriteRune</code></a> method
      now writes the replacement character U+FFFD for negative rune values,
      as it does for other invalid runes.
    </p>
  </dd>
</dl><!-- bufio -->

<dl id="bytes"><dt><a href="/pkg/bytes/">bytes</a></dt>
  <dd>
    <p><!-- CL 280492 -->
      The <a href="/pkg/bytes/#Buffer.WriteRune"><code>Buffer.WriteRune</code></a> method
      now writes the replacement character U+FFFD for negative rune values,
      as it does for other invalid runes.
    </p>
  </dd>
</dl><!-- bytes -->

<dl id="compress/lzw"><dt><a href="/pkg/compress/lzw/">compress/lzw</a></dt>
  <dd>
    <p><!-- CL 273667 -->
      The <a href="/pkg/compress/lzw/#NewReader"><code>NewReader</code></a>
      function is guaranteed to return a value of the new
      type <a href="/pkg/compress/lzw/#Reader"><code>Reader</code></a>,
      and similarly <a href="/pkg/compress/lzw/#NewWriter"><code>NewWriter</code></a>
      is guaranteed to return a value of the new
      type <a href="/pkg/compress/lzw/#Writer"><code>Writer</code></a>.
      These new types both implement a <code>Reset</code> method
      (<a href="/pkg/compress/lzw/#Reader.Reset"><code>Reader.Reset</code></a>,
      <a href="/pkg/compress/lzw/#Writer.Reset"><code>Writer.Reset</code></a>)
      that allows reuse of the <code>Reader</code> or <code>Writer</code>.
    </p>
  </dd>
</dl><!-- compress/lzw -->

<dl id="crypto/ed25519"><dt><a href="/pkg/crypto/ed25519/">crypto/ed25519</a></dt>
  <dd>
    <p><!-- CL 276272 -->
      The <code>crypto/ed25519</code> package has been rewritten, and all
      operations are now approximately twice as fast on amd64 and arm64.
      The observable behavior has not otherwise changed.
    </p>
  </dd>
</dl><!-- crypto/ed25519 -->

<dl id="crypto/elliptic"><dt><a href="/pkg/crypto/elliptic/">crypto/elliptic</a></dt>
  <dd>
    <p><!-- CL 233939 -->
      <a href="/pkg/crypto/elliptic#CurveParams"><code>CurveParams</code></a>
      methods now automatically invoke faster and safer dedicated
      implementations for known curves (P-224, P-256, and P-521) when
      available. Note that this is a best-effort approach and applications
      should avoid using the generic, not constant-time <code>CurveParams</code>
      methods and instead use dedicated
      <a href="/pkg/crypto/elliptic#Curve"><code>Curve</code></a> implementations
      such as <a href="/pkg/crypto/elliptic#P256"><code>P256</code></a>.
    </p>

    <p><!-- CL 315271, CL 315274 -->
      The <a href="/pkg/crypto/elliptic#P521"><code>P521</code></a> curve
      implementation has been rewritten using code generated by the
      <a href="https://github.com/mit-plv/fiat-crypto">fiat-crypto project</a>,
      which is based on a formally-verified model of the arithmetic
      operations. It is now constant-time and three times faster on amd64 and
      arm64. The observable behavior has not otherwise changed.
    </p>
  </dd>
</dl><!-- crypto/elliptic -->

<dl id="crypto/rand"><dt><a href="/pkg/crypto/rand/">crypto/rand</a></dt>
  <dd>
    <p><!-- CL 302489, CL 299134, CL 269999 -->
      The <code>crypto/rand</code> package now uses the <code>getentropy</code>
      syscall on macOS and the <code>getrandom</code> syscall on Solaris,
      Illumos, and DragonFlyBSD.
    </p>
  </dd>
</dl><!-- crypto/rand -->

<dl id="crypto/tls"><dt><a href="/pkg/crypto/tls/">crypto/tls</a></dt>
  <dd>
    <p><!-- CL 295370 -->
      The new <a href="/pkg/crypto/tls#Conn.HandshakeContext"><code>Conn.HandshakeContext</code></a>
      method allows the user to control cancellation of an in-progress TLS
      handshake. The provided context is accessible from various callbacks through the new
      <a href="/pkg/crypto/tls#ClientHelloInfo.Context"><code>ClientHelloInfo.Context</code></a> and
      <a href="/pkg/crypto/tls#CertificateRequestInfo.Context"><code>CertificateRequestInfo.Context</code></a>
      methods. Canceling the context after the handshake has finished has no effect.
    </p>

    <p><!-- CL 314609 -->
      Cipher suite ordering is now handled entirely by the
      <code>crypto/tls</code> package. Currently, cipher suites are sorted based
      on their security, performance, and hardware support taking into account
      both the local and peer's hardware. The order of the
      <a href="/pkg/crypto/tls#Config.CipherSuites"><code>Config.CipherSuites</code></a>
      field is now ignored, as well as the
      <a href="/pkg/crypto/tls#Config.PreferServerCipherSuites"><code>Config.PreferServerCipherSuites</code></a>
      field. Note that <code>Config.CipherSuites</code> still allows
      applications to choose what TLS 1.0–1.2 cipher suites to enable.
    </p>

    <p>
      The 3DES cipher suites have been moved to
      <a href="/pkg/crypto/tls#InsecureCipherSuites"><code>InsecureCipherSuites</code></a>
      due to <a href="https://sweet32.info/">fundamental block size-related
      weakness</a>. They are still enabled by default but only as a last resort,
      thanks to the cipher suite ordering change above.
    </p>

    <p><!-- golang.org/issue/45428 -->
      Beginning in the next release, Go 1.18, the
      <a href="/pkg/crypto/tls/#Config.MinVersion"><code>Config.MinVersion</code></a>
      for <code>crypto/tls</code> clients will default to TLS 1.2, disabling TLS 1.0
      and TLS 1.1 by default. Applications will be able to override the change by
      explicitly setting <code>Config.MinVersion</code>.
      This will not affect <code>crypto/tls</code> servers.
    </p>
  </dd>
</dl><!-- crypto/tls -->

<dl id="crypto/x509"><dt><a href="/pkg/crypto/x509/">crypto/x509</a></dt>
  <dd>
    <p><!-- CL 224157 -->
      <a href="/pkg/crypto/x509/#CreateCertificate"><code>CreateCertificate</code></a>
      now returns an error if the provided private key doesn't match the
      parent's public key, if any. The resulting certificate would have failed
      to verify.
    </p>

    <p><!-- CL 315209 -->
      The temporary <code>GODEBUG=x509ignoreCN=0</code> flag has been removed.
    </p>

    <p><!-- CL 274234 -->
      <a href="/pkg/crypto/x509/#ParseCertificate"><code>ParseCertificate</code></a>
      has been rewritten, and now consumes ~70% fewer resources. The observable
      behavior has not otherwise changed, except for error messages.
    </p>

    <p><!-- CL 321190 -->
      On BSD systems, <code>/etc/ssl/certs</code> is now searched for trusted
      roots. This adds support for the new system trusted certificate store in
      FreeBSD 12.2+.
    </p>

    <p><!-- golang.org/issue/41682 -->
      Beginning in the next release, Go 1.18, <code>crypto/x509</code> will
      reject certificates signed with the SHA-1 hash function. This doesn't
      apply to self-signed root certificates. Practical attacks against SHA-1
      <a href="https://shattered.io/">have been demonstrated in 2017</a> and publicly
      trusted Certificate Authorities have not issued SHA-1 certificates since 2015.
    </p>
  </dd>
</dl><!-- crypto/x509 -->

<dl id="database/sql"><dt><a href="/pkg/database/sql/">database/sql</a></dt>
  <dd>
    <p><!-- CL 258360 -->
      The <a href="/pkg/database/sql/#DB.Close"><code>DB.Close</code></a> method now closes
      the <code>connector</code> field if the type in this field implements the
      <a href="/pkg/io/#Closer"><code>io.Closer</code></a> interface.
    </p>

    <p><!-- CL 311572 -->
      The new
      <a href="/pkg/database/sql/#NullInt16"><code>NullInt16</code></a> 
      and 
      <a href="/pkg/database/sql/#NullByte"><code>NullByte</code></a> 
      structs represent the int16 and byte values that may be null. These can be used as
      destinations of the <a href="/pkg/database/sql/#Scan"><code>Scan</code></a> method,
      similar to NullString.
    </p>
  </dd>
</dl><!-- database/sql -->

<dl id="debug/elf"><dt><a href="/pkg/debug/elf/">debug/elf</a></dt>
  <dd>
    <p><!-- CL 239217 -->
      The <a href="/pkg/debug/elf/#SHT_MIPS_ABIFLAGS"><code>SHT_MIPS_ABIFLAGS</code></a>
      constant has been added.
    </p>
  </dd>
</dl><!-- debug/elf -->

<dl id="encoding/binary"><dt><a href="/pkg/encoding/binary/">encoding/binary</a></dt>
  <dd>
    <p><!-- CL 299531 -->
      <code>binary.Uvarint</code> will stop reading after <code>10 bytes</code> to avoid
      wasted computations. If more than <code>10 bytes</code> are needed, the byte count returned is <code>-11</code>.
      <br />
      Previous Go versions could return larger negative counts when reading incorrectly encoded varints.
    </p>
  </dd>
</dl><!-- encoding/binary -->

<dl id="encoding/csv"><dt><a href="/pkg/encoding/csv/">encoding/csv</a></dt>
  <dd>
    <p><!-- CL 291290 -->
      The new
      <a href="/pkg/encoding/csv/#Reader.FieldPos"><code>Reader.FieldPos</code></a>
      method returns the line and column corresponding to the start of
      a given field in the record most recently returned by
      <a href="/pkg/encoding/csv/#Reader.Read"><code>Read</code></a>.
    </p>
  </dd>
</dl><!-- encoding/csv -->

<dl id="encoding/xml"><dt><a href="/pkg/encoding/xml/">encoding/xml</a></dt>
  <dd>
    <p><!-- CL 277893 -->
      When a comment appears within a
      <a href="/pkg/encoding/xml/#Directive"><code>Directive</code></a>, it is now replaced
      with a single space instead of being completely elided.
    </p>

    <p>
      Invalid element or attribute names with leading, trailing, or multiple
      colons are now stored unmodified into the
      <a href="/pkg/encoding/xml/#Name"><code>Name.Local</code></a> field.
    </p>
  </dd>
</dl><!-- encoding/xml -->

<dl id="flag"><dt><a href="/pkg/flag/">flag</a></dt>
  <dd>
    <p><!-- CL 271788 -->
      Flag declarations now panic if an invalid name is specified.
    </p>
  </dd>
</dl><!-- flag -->

<dl id="go/build"><dt><a href="/pkg/go/build/">go/build</a></dt>
  <dd>
    <p><!-- CL 310732 -->
      The new
      <a href="/pkg/go/build/#Context.ToolTags"><code>Context.ToolTags</code></a>
      field holds the build tags appropriate to the current Go
      toolchain configuration.
    </p>
  </dd>
</dl><!-- go/build -->

<dl id="go/format"><dt><a href="/pkg/go/format/">go/format</a></dt>
  <dd>
    <p>
      The <a href="/pkg/go/format/#Source"><code>Source</code></a> and
      <a href="/pkg/go/format/#Node"><code>Node</code></a> functions now
      synchronize <code>//go:build</code> lines with <code>// +build</code>
      lines. If a file only has <code>// +build</code> lines, they will be
      moved to the appropriate location in the file, and matching
      <code>//go:build</code> lines will be added. Otherwise,
      <code>// +build</code> lines will be overwritten based on any existing
      <code>//go:build</code> lines. For more information, see
      <a href="https://golang.org/design/draft-gobuild">https://golang.org/design/draft-gobuild</a>.
    </p>
  </dd>
</dl><!-- go/format -->

<dl id="go/parser"><dt><a href="/pkg/go/parser/">go/parser</a></dt>
  <dd>
    <p><!-- CL 306149 -->
      The new <a href="/pkg/go/parser/#SkipObjectResolution"><code>SkipObjectResolution</code></a>
      <code>Mode</code> value instructs the parser not to resolve identifiers to
      their declaration. This may improve parsing speed.
    </p>
  </dd>
</dl><!-- go/parser -->

<dl id="image"><dt><a href="/pkg/image/">image</a></dt>
  <dd>
    <p><!-- CL 311129 -->
      The concrete image types (<code>RGBA</code>, <code>Gray16</code> and so on)
      now implement a new <a href="/pkg/image/#RGBA64Image"><code>RGBA64Image</code></a>
      interface. Those concrete types, other than the chroma-subsampling
      related <code>YCbCr</code> and <code>NYCbCrA</code>, also now implement
      <a href="/pkg/image/draw/#RGBA64Image"><code>draw.RGBA64Image</code></a>, a
      new interface in the <code>image/draw</code> package.
    </p>
  </dd>
</dl><!-- image -->

<dl id="io/fs"><dt><a href="/pkg/io/fs/">io/fs</a></dt>
  <dd>
    <p><!-- CL 293649 -->
      The new <a href="/pkg/io/fs/#FileInfoToDirEntry"><code>FileInfoToDirEntry</code></a> function converts a <code>FileInfo</code> to a <code>DirEntry</code>.
    </p>
  </dd>
</dl><!-- io/fs -->

<dl id="math"><dt><a href="/pkg/math/">math</a></dt>
  <dd>
    <p><!-- CL 247058 -->
      The math package now defines three more constants: <code>MaxUint</code>, <code>MaxInt</code> and <code>MinInt</code>.
      For 32-bit systems their values are <code>2^32 - 1</code>, <code>2^31 - 1</code> and <code>-2^31</code>, respectively.
      For 64-bit systems their values are <code>2^64 - 1</code>, <code>2^63 - 1</code> and <code>-2^63</code>, respectively.
    </p>
  </dd>
</dl><!-- math -->

<dl id="mime"><dt><a href="/pkg/mime/">mime</a></dt>
  <dd>
    <p><!-- CL 305230 -->
      On Unix systems, the table of MIME types is now read from the local system's
      <a href="https://specifications.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-0.21.html">Shared MIME-info Database</a>
      when available.
    </p>
  </dd>
</dl><!-- mime -->

<dl id="mime/multipart"><dt><a href="/pkg/mime/multipart/">mime/multipart</a></dt>
  <dd>
    <p><!-- CL 313809 -->
      <a href="/pkg/mime/multipart/#Part.FileName"><code>Part.FileName</code></a>
      now applies
      <a href="/pkg/path/filepath/#Base"><code>filepath.Base</code></a> to the
      return value. This mitigates potential path traversal vulnerabilities in
      applications that accept multipart messages, such as <code>net/http</code>
      servers that call
      <a href="/pkg/net/http/#Request.FormFile"><code>Request.FormFile</code></a>.
    </p>
  </dd>
</dl><!-- mime/multipart -->

<dl id="net"><dt><a href="/pkg/net/">net</a></dt>
  <dd>
    <p><!-- CL 272668 -->
      The new method <a href="/pkg/net/#IP.IsPrivate"><code>IP.IsPrivate</code></a> reports whether an address is
      a private IPv4 address according to <a href="http://tools.ietf.org/html/rfc1918">RFC 1918</a>
      or a local IPv6 address according <a href="http://tools.ietf.org/html/rfc4193">RFC 4193</a>.
    </p>

    <p><!-- CL 301709 -->
      The Go DNS resolver now only sends one DNS query when resolving an address for an IPv4-only or IPv6-only network,
      rather than querying for both address families.
    </p>

    <p><!-- CL 307030 -->
      The <a href="/pkg/net/#ErrClosed"><code>ErrClosed</code></a> sentinel error and
      <a href="/pkg/net/#ParseError"><code>ParseError</code></a> error type now implement
      the <a href="/pkg/net/#Error"><code>net.Error</code></a> interface.
    </p>

    <p><!-- CL 325829 -->
      The <a href="/pkg/net/#ParseIP"><code>ParseIP</code></a> and <a href="/pkg/net/#ParseCIDR"><code>ParseCIDR</code></a>
      functions now reject IPv4 addresses which contain decimal components with leading zeros.

      These components were always interpreted as decimal, but some operating systems treat them as octal.
      This mismatch could hypothetically lead to security issues if a Go application was used to validate IP addresses
      which were then used in their original form with non-Go applications which interpreted components as octal. Generally,
      it is advisable to always re-encode values after validation, which avoids this class of parser misalignment issues.
    </p>
  </dd>
</dl><!-- net -->

<dl id="net/http"><dt><a href="/pkg/net/http/">net/http</a></dt>
  <dd>
    <p><!-- CL 295370 -->
      The <a href="/pkg/net/http/"><code>net/http</code></a> package now uses the new
      <a href="/pkg/crypto/tls#Conn.HandshakeContext"><code>(*tls.Conn).HandshakeContext</code></a>
      with the <a href="/pkg/net/http/#Request"><code>Request</code></a> context
      when performing TLS handshakes in the client or server.
    </p>

    <p><!-- CL 235437 -->
      Setting the <a href="/pkg/net/http/#Server"><code>Server</code></a>
      <code>ReadTimeout</code> or <code>WriteTimeout</code> fields to a negative value now indicates no timeout
      rather than an immediate timeout.
    </p>

    <p><!-- CL 308952 -->
      The <a href="/pkg/net/http/#ReadRequest"><code>ReadRequest</code></a> function
      now returns an error when the request has multiple Host headers.
    </p>

    <p><!-- CL 313950 -->
      When producing a redirect to the cleaned version of a URL,
      <a href="/pkg/net/http/#ServeMux"><code>ServeMux</code></a> now always
      uses relative URLs in the <code>Location</code> header. Previously it
      would echo the full URL of the request, which could lead to unintended
      redirects if the client could be made to send an absolute request URL.
    </p>

    <p><!-- CL 308009, CL 313489 -->
      When interpreting certain HTTP headers handled by <code>net/http</code>,
      non-ASCII characters are now ignored or rejected.
    </p>

    <p><!-- CL 325697 -->
      If
      <a href="/pkg/net/http/#Request.ParseForm"><code>Request.ParseForm</code></a>
      returns an error when called by
      <a href="/pkg/net/http/#Request.ParseMultipartForm"><code>Request.ParseMultipartForm</code></a>,
      the latter now continues populating
      <a href="/pkg/net/http/#Request.MultipartForm"><code>Request.MultipartForm</code></a>
      before returning it.
    </p>
  </dd>
</dl><!-- net/http -->

<dl id="net/http/httptest"><dt><a href="/pkg/net/http/httptest/">net/http/httptest</a></dt>
  <dd>
    <p><!-- CL 308950 -->
      <a href="/pkg/net/http/httptest/#ResponseRecorder.WriteHeader"><code>ResponseRecorder.WriteHeader</code></a>
      now panics when the provided code is not a valid three-digit HTTP status code.
      This matches the behavior of <a href="/pkg/net/http/#ResponseWriter"><code>ResponseWriter</code></a>
      implementations in the <a href="/pkg/net/http/"><code>net/http</code></a> package.
    </p>
  </dd>
</dl><!-- net/http/httptest -->

<dl id="net/url"><dt><a href="/pkg/net/url/">net/url</a></dt>
  <dd>
    <p><!-- CL 314850 -->
      The new method <a href="/pkg/net/url/#Values.Has"><code>Values.Has</code></a>
      reports whether a query parameter is set.
    </p>
  </dd>
</dl><!-- net/url -->

<dl id="os"><dt><a href="/pkg/os/">os</a></dt>
  <dd>
    <p><!-- CL 268020 -->
      The <a href="/pkg/os/#File.WriteString"><code>File.WriteString</code></a> method
      has been optimized to not make a copy of the input string.
    </p>
  </dd>
</dl><!-- os -->

<dl id="reflect"><dt><a href="/pkg/reflect/">reflect</a></dt>
  <dd>
    <p><!-- CL 266197 -->
      The new
      <a href="/pkg/reflect/#StructField.IsExported"><code>StructField.IsExported</code></a>
      and
      <a href="/pkg/reflect/#Method.IsExported"><code>Method.IsExported</code></a>
      methods report whether a struct field or type method is exported.
      They provide a more readable alternative to checking whether <code>PkgPath</code>
      is empty.
    </p>

    <p><!-- CL 281233 -->
      The new <a href="/pkg/reflect/#VisibleFields"><code>VisibleFields</code></a> function
      returns all the visible fields in a struct type, including fields inside anonymous struct members.
    </p>

    <p><!-- CL 284136 -->
      The <a href="/pkg/reflect/#ArrayOf"><code>ArrayOf</code></a> function now panics when
      called with a negative length.
    </p>

    <p><!-- CL 301652 -->
      Checking the <a href="/pkg/reflect/#Type"><code>Type.ConvertibleTo</code></a> method
      is no longer sufficient to guarantee that a call to
      <a href="/pkg/reflect/#Value.Convert"><code>Value.Convert</code></a> will not panic.
      It may panic when converting `[]T` to `*[N]T` if the slice's length is less than N.
      See the language changes section above.
    </p>
  </dd>
</dl><!-- reflect -->

<dl id="runtime/metrics"><dt><a href="/pkg/runtime/metrics">runtime/metrics</a></dt>
  <dd>
    <p><!-- CL 308933, CL 312431, CL 312909 -->
      New metrics were added that track total bytes and objects allocated and freed.
      A new metric tracking the distribution of goroutine scheduling latencies was
      also added.
    </p>
  </dd>
</dl><!-- runtime/metrics -->

<dl id="runtime/pprof"><dt><a href="/pkg/runtime/pprof">runtime/pprof</a></dt>
  <dd>
    <p><!-- CL 299991 -->
      Block profiles are no longer biased to favor infrequent long events over
      frequent short events.
    </p>
  </dd>
</dl><!-- runtime/pprof -->

<dl id="strconv"><dt><a href="/pkg/strconv/">strconv</a></dt>
  <dd>
    <p><!-- CL 170079, CL 170080 -->
      The <code>strconv</code> package now uses Ulf Adams's Ryū algorithm for formatting floating-point numbers.
      This algorithm improves performance on most inputs and is more than 99% faster on worst-case inputs.
    </p>

    <p><!-- CL 314775 -->
      The new <a href="/pkg/strconv/#QuotedPrefix"><code>QuotedPrefix</code></a> function
      returns the quoted string (as understood by
      <a href="/pkg/strconv/#Unquote"><code>Unquote</code></a>)
      at the start of input.
    </p>
  </dd>
</dl><!-- strconv -->

<dl id="strings"><dt><a href="/pkg/strings/">strings</a></dt>
  <dd>
    <p><!-- CL 280492 -->
      The <a href="/pkg/strings/#Builder.WriteRune"><code>Builder.WriteRune</code></a> method
      now writes the replacement character U+FFFD for negative rune values,
      as it does for other invalid runes.
    </p>
  </dd>
</dl><!-- strings -->

<dl id="sync/atomic"><dt><a href="/pkg/sync/atomic/">sync/atomic</a></dt>
  <dd>
    <p><!-- CL 241678 -->
      <code>atomic.Value</code> now has <a href="/pkg/sync/atomic/#Value.Swap"><code>Swap</code></a> and
      <a href="/pkg/sync/atomic/#Value.CompareAndSwap"><code>CompareAndSwap</code></a> methods that provide
      additional atomic operations.
    </p>
  </dd>
</dl><!-- sync/atomic -->

<dl id="syscall"><dt><a href="/pkg/syscall/">syscall</a></dt>
  <dd>
    <p><!-- CL 295371 -->
    <p>
      The <a href="/pkg/syscall/#GetQueuedCompletionStatus"><code>GetQueuedCompletionStatus</code></a> and
      <a href="/pkg/syscall/#PostQueuedCompletionStatus"><code>PostQueuedCompletionStatus</code></a>
      functions are now deprecated. These functions have incorrect signatures and are superseded by
      equivalents in the <a href="https://godoc.org/golang.org/x/sys/windows"><code>golang.org/x/sys/windows</code></a> package.
    </p>

    <p><!-- CL 313653 -->
      On Unix-like systems, the process group of a child process is now set with signals blocked.
      This avoids sending a <code>SIGTTOU</code> to the child when the parent is in a background process group.
    </p>

    <p><!-- CL 288298, CL 288300 -->
      The Windows version of
      <a href="/pkg/syscall/#SysProcAttr"><code>SysProcAttr</code></a>
      has two new fields. <code>AdditionalInheritedHandles</code> is
      a list of additional handles to be inherited by the new child
      process. <code>ParentProcess</code> permits specifying the
      parent process of the new process.

    <p><!-- CL 311570 -->
      The constant <code>MSG_CMSG_CLOEXEC</code> is now defined on
      DragonFly and all OpenBSD systems (it was already defined on
      some OpenBSD systems and all FreeBSD, NetBSD, and Linux systems).
    </p>

    <p><!-- CL 315281 -->
      The constants <code>SYS_WAIT6</code> and <code>WEXITED</code>
      are now defined on NetBSD systems (<code>SYS_WAIT6</code> was
      already defined on DragonFly and FreeBSD systems;
      <code>WEXITED</code> was already defined on Darwin, DragonFly,
      FreeBSD, Linux, and Solaris systems).
    </p>
  </dd>
</dl><!-- syscall -->

<dl id="testing"><dt><a href="/pkg/testing/">testing</a></dt>
  <dd>
    <p><!-- CL 310033 -->
      Added a new <a href="/cmd/go/#hdr-Testing_flags">testing flag</a> <code>-shuffle</code> which controls the execution order of tests and benchmarks.
    </p>
    <p><!-- CL 260577 -->
      The new
      <a href="/pkg/testing/#T.Setenv"><code>T.Setenv</code></a>
      and <a href="/pkg/testing/#B.Setenv"><code>B.Setenv</code></a>
      methods support setting an environment variable for the duration
      of the test or benchmark.
    </p>
  </dd>
</dl><!-- testing -->

<dl id="text/template/parse"><dt><a href="/pkg/text/template/parse/">text/template/parse</a></dt>
  <dd>
    <p><!-- CL 301493 -->
      The new <a href="/pkg/text/template/parse/#Mode"><code>SkipFuncCheck</code></a> <a href=><code>Mode</code></a>
      value changes the template parser to not verify that functions are defined.
    </p>
  </dd>
</dl><!-- text/template/parse -->

<dl id="time"><dt><a href="/pkg/time/">time</a></dt>
  <dd>
    <p><!-- CL 260858 -->
      The <a href="/pkg/time/#Time"><code>Time</code></a> type now has a
      <a href="/pkg/time/#Time.GoString"><code>GoString</code></a> method that
      will return a more useful value for times when printed with the
      <code>%#v</code> format specifier in the <code>fmt</code> package.
    </p>

    <p><!-- CL 264077 -->
      The new <a href="/pkg/time/#Time.IsDST"><code>Time.IsDST</code></a> method can be used to check whether the time
      is in Daylight Savings Time in its configured location.
    </p>

    <p><!-- CL 293349 -->
      The new <a href="/pkg/time/#Time.UnixMilli"><code>Time.UnixMilli</code></a> and
      <a href="/pkg/time/#Time.UnixMicro"><code>Time.UnixMicro</code></a> methods return the number of milliseconds and
      microseconds elapsed since January 1, 1970 UTC respectively.<br>
      The new <code>UnixMilli</code> and <code>UnixMicro</code> functions return local Time corresponding to given
      Unix time.
    </p>

    <p><!-- CL 300996 -->
      The package now accepts comma "," as a separator for fractional seconds when parsing and formatting time.
      The following time formats are now accepted:
      <ul>
        <li>2006-01-02 14:06:03,999999999 -0700 MST</li>
        <li>Mon Jan _2 14:06:03,120007 2006</li>
        <li>Mon Jan 2 14:06:03,120007 2006</li>
      </ul>
    </p>

    <p><!-- CL 320252 -->
      The new constant <a href="/pkg/time/#Layout"><code>Layout</code></a>
      defines the reference time.
    </p>
  </dd>
</dl><!-- time -->

<dl id="unicode"><dt><a href="/pkg/unicode/">unicode</a></dt>
  <dd>
    <p><!-- CL 280493 -->
      The <a href="/pkg/unicode/#Is"><code>Is</code></a>,
      <a href="/pkg/unicode/#IsGraphic"><code>IsGraphic</code></a>,
      <a href="/pkg/unicode/#IsLetter"><code>IsLetter</code></a>,
      <a href="/pkg/unicode/#IsLower"><code>IsLower</code></a>,
      <a href="/pkg/unicode/#IsMark"><code>IsMark</code></a>,
      <a href="/pkg/unicode/#IsNumber"><code>IsNumber</code></a>,
      <a href="/pkg/unicode/#IsPrint"><code>IsPrint</code></a>,
      <a href="/pkg/unicode/#IsPunct"><code>IsPunct</code></a>,
      <a href="/pkg/unicode/#IsSpace"><code>IsSpace</code></a>,
      <a href="/pkg/unicode/#IsSymbol"><code>IsSymbol</code></a>, and
      <a href="/pkg/unicode/#IsUpper"><code>IsUpper</code></a> functions
      now return <code>false</code> on negative rune values, as they do for other invalid runes.
    </p>
  </dd>
</dl><!-- unicode -->
