and improvements to the code generated by the compilers.
</p>
+<p id="freebsd">
+As <a href="go1.9#freebsd">announced in the Go 1.9 release notes</a>,
+Go 1.10 now requires FreeBSD 10.3 or later;
+support for FreeBSD 9.3 has been removed.
+</p>
+
+<p id="mips">
+On 32-bit MIPS systems, the new environment variable settings
+<code>GOMIPS=hardfloat</code> (the default) and
+<code>GOMIPS=softfloat</code> select whether to use
+hardware instructions or software emulation for floating-point computations.
+</p>
+
<h2 id="tools">Tools</h2>
<h3 id="goroot">Default GOROOT & GOTMPDIR</h3>
lines to make clearer when <a href="/pkg/testing/#T.Parallel">parallel tests</a> pause and continue.
</p>
+<p>
+The new <code>go</code> <code>test</code> <code>-failfast</code> flag
+disables running additional tests after any test fails.
+Note that tests running in parallel with the failing test are allowed to complete.
+</p>
+
<p>
Finally, the new <code>go</code> <code>test</code> <code>-json</code> flag
filters test output through the new command
<code>go</code> <code>tool</code> <code>test2json</code>
to produce a machine-readable JSON-formatted description of test execution.
-This should allow the creation of rich presentations of test execution
+This allows the creation of rich presentations of test execution
in IDEs and other tools.
</p>
<p>
For more details about all these changes,
-see <a href="TODO"><code>go</code> <code>help</code> <code>test</code></a>
+see <a href="/cmd/go/#hdr-Test_packages"><code>go</code> <code>help</code> <code>test</code></a>
and the <a href="/cmd/test2json/">test2json documentation</a>.
</p>
Go structs and Go arrays are not supported in the type signatures of cgo-exported functions.
</p>
+<p>
+TODO: CL 70890 "permit passing string values directly between Go and C."
+<br>
+TODO: CL 66332 "special case C ptr types to use uintptr."
+</p>
+
<p>
During toolchain bootstrap, the environment variables <code>CC</code> and <code>CC_FOR_TARGET</code> specify
the default C compiler that the resulting toolchain will use for host and target builds, respectively.
to set the defaults used by the resulting toolchain.
Later <code>go</code> <code>build</code> commands refer to the <code>CC</code> environment
variable or else the built-in default.
+</p>
+
+<p>
For more details, see the <a href="/cmd/cgo/">cgo documentation</a>.
</p>
<h3 id="gofmt">Gofmt</h3>
<p>
-A few minor details of the default formatting of Go source code have changed.
-First, some complex three-index slice expressions previously formatted like
+Two minor details of the default formatting of Go source code have changed.
+First, certain complex three-index slice expressions previously formatted like
<code>x[i+1</code> <code>:</code> <code>j:k]</code> and now
format with more consistent spacing: <code>x[i+1</code> <code>:</code> <code>j</code> <code>:</code> <code>k]</code>.
Second, single-method interface literals written on a single line,
which are sometimes used in type assertions,
are no longer split onto multiple lines.
-Third, blank lines following an opening brace are now always elided.
</p>
<p>
as well as the major and minor device numbers for device files.
</p>
<p>
-Errors created by the package now begin with a consistent “tar:” prefix.
-(Previously they almost all began with a consistent “archive/tar:” prefix.)
-TODO: Why are we changing these? (#22740)
-</p>
-<p>
The new <a href="/pkg/archive/tar/#Header"><code>Header.Format</code></a> field
of type <a href="/pkg/archive/tar/#Format"><code>Format</code></a>
controls which tar header format the <a href="/pkg/archive/tar/#Writer"><code>Writer</code></a> uses.
now support the widely-understood Info-Zip extension that encodes the time separately in the 32-bit Unix “seconds since epoch” form.
The <a href="/pkg/archive/zip/#FileHeader"><code>FileHeader</code></a>'s new <code>Modified</code> field of type <a href="/pkg/time/#Time"><code>time.Time</code></a>
obsoletes the <code>ModifiedTime</code> and <code>ModifiedDate</code> fields, which continue to hold the MS-DOS encoding.
-The <a href="/pkg/archive/zip/#FileHeader.ModTime"><code>ModTime</code></a> and
-<a href="/pkg/archive/zip/#FileHeader.SetModTime"><code>SetModTime</code></a> methods
-now simply read and write the new <code>Modified</code> field.
The <code>Reader</code> and <code>Writer</code> now adopt the common
convention that ZIP archive storing the Unix time encoding store the local time
in the MS-DOS field, so that the time zone offset can be inferred.
-TODO: These last bits are not true but probably should be (#22738)
+For compatibility, the <a href="/pkg/archive/zip/#FileHeader.ModTime"><code>ModTime</code></a> and
+<a href="/pkg/archive/zip/#FileHeader.SetModTime"><code>SetModTime</code></a> methods
+behave the same as in earlier releases; new code should use <code>Modified</code> directly.
</p>
<p>
The header for each file in a ZIP archive has a flag bit indicating whether
disables the heuristic entirely for that file.
</p>
<p>
-The <code>Writer</code> also now support setting the end-of-central-directory record's comment field,
-by setting the <code>Writer</code>'s new <code>Comment</code> field
-before calling the <a href="/pkg/archive/zip/#Writer.Close"><code>Close</code></a> method.
-TODO: May change (#22737).
+The <code>Writer</code> also now supports setting the end-of-central-directory record's comment field,
+by calling the <code>Writer</code>'s new <a href="/pkg/archive/zip/#Writer.SetComment"><code>SetComment</code></a> method.
</p>
</dl>
<code>PermittedURIDomains</code>, and <code>ExcludedURIDomains</code>.
</p>
+<p>
+The new <a href="/pkg/crypto/x509/#MarshalPKCS1PublicKey"><code>MarshalPKCS1PublicKey</code></a>
+and <a href="/pkg/crypto/x509/#ParsePKCS1PublicKey"><code>ParsePKCS1PublicKey</code></a>
+functions convert an RSA public key to and from PKCS#1-encoded form.
+</p>
+
<p>
The new <a href="/pkg/crypto/x509/#MarshalPKCS8PrivateKey"><code>MarshalPKCS8PrivateKey</code></a>
-function converts a private key to PKCS#8 encoded form.
+function converts a private key to PKCS#8-encoded form.
+(<a href="/pkg/crypto/x509/#ParsePKCS8PrivateKey"><code>ParsePKCS8PrivateKey</code></a>
+has existed since Go 1.)
</p>
</dl>
passed to <a href="/pkg/database/sql/#Open"><code>sql.Open</code></a>.
</p>
<p>
+Drivers that want to parse the configuration string only once per <code>sql.DB</code>
+instead of once per <a href="/pkg/database/sql/#Conn"><code>sql.Conn</code></a>,
+or that want access to each <code>sql.Conn</code>'s underlying context,
+can make their <a href="/pkg/database/sql/driver/#Driver"><code>Driver</code></a>
+implementations also implement <a href="/pkg/database/sql/driver/#DriverContext"><code>DriverContext</code></a>'s
+new <code>OpenConnector</code> method.
+</p>
+<p>
Drivers that implement <a href="/pkg/database/sql/driver/#ExecerContext"><code>ExecerContext</code></a>
no longer need to implement <a href="/pkg/database/sql/driver/#Execer"><code>Execer</code></a>;
similarly, drivers that implement <a href="/pkg/database/sql/driver/#QueryerContext"><code>QueryerContext</code></a>
<code>Marshal</code> also now respects struct tags containing <code>application</code> directives.
</p>
<p>
+The new <a href="/pkg/encoding/asn1/#MarshalWithParams"><code>MarshalWithParams</code></a>
+function marshals its argument as if the additional params were its associated
+struct field tag.
+</p>
+<p>
<a href="/pkg/encoding/asn1/#Unmarshal"><code>Unmarshal</code></a> now respects
struct field tags using the <code>explicit</code> and <code>tag</code>
directives.
</p>
+<p>
+Both <code>Marshal</code> and <code>Unmarshal</code> now support a new struct field tag
+<code>numeric</code>, indicating an ASN.1 NumericString.
+</p>
</dl>
<dl id="encoding/csv"><dt><a href="/pkg/encoding/csv/">encoding/csv</a></dt>
In the case of a syntax error in a CSV record that spans multiple input lines, <code>Reader</code>
now reports the line on which the record started in the <a href="/pkg/encoding/csv/#ParseError"><code>ParseError</code></a>'s new <code>StartLine</code> field.
</p>
-<p>
-<code>Reader</code> also no longer strips carriage return characters
-appearing before newline characters in multiline quoted strings.
-TODO: Maybe not (#22746).
-</p>
</dl>
<dl id="encoding/hex"><dt><a href="/pkg/encoding/hex/">encoding/hex</a></dt>
</p>
</dl>
+<dl id="encoding/pem"><dt><a href="/pkg/encoding/pem/">encoding/pem</a></dt>
+<dd>
+<p>
+<a href="/pkg/encoding/pem/#Encode"><code>Encode</code></a>
+and
+<a href="/pkg/encoding/pem/#EncodeToMemory"><code>EncodeToMemory</code></a>
+no longer generate partial output when presented with a
+block that is impossible to encode as PEM data.
+</p>
+</dl>
+
<dl id="encoding/xml"><dt><a href="/pkg/encoding/xml/">encoding/xml</a></dt>
<dd>
<p>
</p>
</dl>
+<dl id="math/cmplx"><dt><a href="/pkg/math/cmplx/">math/cmplx</a></dt>
+<dd>
+<p>
+Branch cuts and other boundary cases in
+<a href="/pkg/math/cmplx/#Asin"><code>Asin<code></a>,
+<a href="/pkg/math/cmplx/#Asinh"><code>Asinh<code></a>,
+<a href="/pkg/math/cmplx/#Atan"><code>Atan<code></a>,
+and
+<a href="/pkg/math/cmplx/#Sqrt"><code>Sqrt<code></a>
+have been corrected to match the definitions used in the C99 standard.
+</p>
+</dl>
+
<dl id="math/rand"><dt><a href="/pkg/math/rand/">math/rand</a></dt>
<dd>
<p>
<a href="/pkg/math/rand/#Rand.Shuffle"><code>Rand.Shuffle</code></a> method
shuffle an input sequence.
</p>
-<p>
-The existing <a href="/pkg/math/rand/#Perm"> function and corresponding
-<a href="/pkg/math/rand/#Rand.Perm"><code>Rand.Perm</code></a> method
-have been updated to use a more efficient algorithm, with the result
-that the specific permutations they return have changed.
-TODO: Remove? (#22744)
-</p>
</dl>
<dl id="math"><dt><a href="/pkg/math/">math</a></dt>
On the server side, <a href="/pkg/net/http/#FileServer"><code>FileServer</code></a> and its single-file equivalent <a href="/pkg/net/http/#ServeFile"><code>ServeFile</code></a>
now apply <code>If-Range</code> checks to <code>HEAD</code> requests.
<code>FileServer</code> also now reports directory read failures to the <a href="/pkg/net/http/#Server"><code>Server</code></a>'s <code>ErrorLog</code>.
+The content-serving handlers also now omit the <code>Content-Type</code> header when serving zero-length content.
+</p>
+<p>
+<a href="/pkg/net/http/#ResponseWriter"><code>ResponseWriter</code></a>'s <code>WriteHeader</code> method now panics
+if passed an invalid (non-3-digit) status code.
+</p>
+<p>
+<a href="/pkg/net/http/#Redirect"><code>Redirect</code></a> now sets the <code>Content-Type</code> header before writing its HTTP response.
+</p>
+</dl>
+
+<dl id="net/http/httputil"><dt><a href="/pkg/net/http/httputil/">net/http/httputil</a></dt>
+<dd>
+<p>
+The <a href="/pkg/net/http/httputil/#ReverseProxy">ReverseProxy</a> now invokes
+the <code>
+On the client side, an HTTP proxy (most commonly configured by
+<a href="/pkg/net/http/#ProxyFromEnvironment"><code>ProxyFromEnvironment</code></a>)
+can now be specified as an <code>https://</code> URL,
+meaning that the client connects to the proxy over HTTPS before issuing a standard, proxied HTTP request.
+(Previously, HTTP proxy URLs were required to begin with <code>http://</code> or <code>socks5://</code>.)
+</p>
+<p>
+On the server side, <a href="/pkg/net/http/#FileServer"><code>FileServer</code></a> and its single-file equivalent <a href="/pkg/net/http/#ServeFile"><code>ServeFile</code></a>
+now apply <code>If-Range</code> checks to <code>HEAD</code> requests.
+<code>FileServer</code> also now reports directory read failures to the <a href="/pkg/net/http/#Server"><code>Server</code></a>'s <code>ErrorLog</code>.
</p>
<p>
<a href="/pkg/net/http/#Redirect"><code>Redirect</code></a> now sets the <code>Content-Type</code> header before writing its HTTP response.
<dd>
<p>
<a href="/pkg/net/textproto/#ReadMIMEHeader"><code>ReadMIMEHeader</code></a>
-now discards continuation (indented) header lines that appear before the first actual (unindented) header line.
+now rejects any header that begins with a continuation (indented) header line.
+Previously a header with an indented first line was treated as if the first line
+were not indented.
</p>
</dl>
like <code>http://host/</code> to a path like <code>/my/api</code>,
resulting in a URL with a doubled slash: <code>http://host//my/api</code>.
</p>
+
+<p>
+<a href="/pkg/net/url/#UserInfo"><code>UserInfo</code></a>'s methods
+now treat a nil receiver as equivalent to a pointer to a zero <code>UserInfo</code>.
+Previously, they panicked.
+</p>
</dl>
<dl id="os"><dt><a href="/pkg/os/">os</a></dt>
known installation locations or in <code>$GOROOT/lib/time/zoneinfo.zip</code>.
</p>
<p>
-TODO: Maybe CL 68890.
+The new function <a href="/pkg/time/#LoadLocationFromTZData"><code>LoadLocationFromTZData</code></a>
+allows conversion of IANA time zone file data to a <a href="/pkg/time/#Location"><code>Location</code></a>.
</p>
</dl>