doc/go1.20: complete, add more library TODOs

Finish all standard library TODOs, including additions
flagged by another run of relnote.

Change-Id: Ib9d22672b13b9775a98262d645aaf1d54e7494df
Reviewed-on: https://go-review.googlesource.com/c/go/+/453295
Reviewed-by: Ian Lance Taylor <iant@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Russ Cox <rsc@golang.org>
This commit is contained in:
Russ Cox 2022-11-23 18:08:57 -05:00
parent cc7530daa1
commit 76ec47eeec
1 changed files with 171 additions and 96 deletions

View File

@ -68,7 +68,7 @@ Do not send CLs removing the interior tags from such phrases.
<h3 id="go-command">Go command</h3>
<p><!-- CL 432535: cmd/go: don't install most GOROOT .a files in pkg -->
<p><!-- CL 432535, https://go.dev/issue/47257 -->
The directory <code>$GOROOT/pkg</code> no longer stores
pre-compiled package archives for the standard library:
<code>go</code> <code>install</code> no longer writes them,
@ -101,7 +101,7 @@ Do not send CLs removing the interior tags from such phrases.
the packages named on the command line.
</p>
<p><!-- https://go.dev/issue/45454 --><!-- CL 421434 -->
<p><!-- https://go.dev/issue/45454, CL 421434 -->
The <code>go</code> command now defines
architecture feature build tags, such as <code>amd64.v2</code>,
to allow selecting a package implementation file based on the presence
@ -156,7 +156,7 @@ Do not send CLs removing the interior tags from such phrases.
<h3 id="cgo">Cgo</h3>
<p>
<p><!-- CL 450739 -->
The <code>go</code> command now disables <code>cgo</code> by default
on systems without a C toolchain.
More specifically, when the <code>CGO_ENABLED</code> environment variable is unset,
@ -205,7 +205,7 @@ Do not send CLs removing the interior tags from such phrases.
<h4 id="vet-loopclosure">Improved detection of loop variable capture by nested functions</h4>
<p><!-- CL 447256 --><!-- https://go.dev/issue/55972: extend the loopclosure analysis to parallel subtests -->
<p><!-- CL 447256, https://go.dev/issue/55972: extend the loopclosure analysis to parallel subtests -->
The <code>vet</code> tool now reports references to loop variables following
a call to <a href="/pkg/testing/#T.Parallel"><code>T.Parallel()</code></a>
within subtest function bodies. Such references may observe the value of the
@ -221,7 +221,7 @@ Do not send CLs removing the interior tags from such phrases.
<h4 id="vet-timeformat">New diagnostic for incorrect time formats</h4>
<p><!-- CL 354010 --><!-- https://go.dev/issue/48801: check for time formats with 2006-02-01 -->
<p><!-- CL 354010, https://go.dev/issue/48801: check for time formats with 2006-02-01 -->
The vet tool now reports use of the time format 2006-02-01 (yyyy-dd-mm)
with <a href="/pkg/time/#Time.Format"><code>Time.Format</code></a> and
<a href="/pkg/time/#Parse"><code>time.Parse</code></a>.
@ -238,8 +238,8 @@ Do not send CLs removing the interior tags from such phrases.
<h2 id="compiler">Compiler</h2>
<p><!-- https://go.dev/issue/49390 -->
TODO: <a href="https://go.dev/issue/49390">https://go.dev/issue/49390</a>: clarify whether "-l" and "-N" compiler flags are actually supported
<p>
TODO: complete this section, or delete if not needed
</p>
<h2 id="linker">Linker</h2>
@ -266,10 +266,17 @@ Do not send CLs removing the interior tags from such phrases.
<h2 id="library">Core library</h2>
<h3 id="crypto/ecdh">New <code>crypto/ecdh</code> package</h3>
<h3 id="crypto/ecdh">New crypto/ecdh package</h3>
<p><!-- https://go.dev/issue/52221, CL 398914 -->
TODO: complete this section
<p><!-- https://go.dev/issue/52221, CL 398914, CL 450335 -->
Go 1.20 adds a new <a href="/pkg/crypto/ecdh/"><code>crypto/ecdh</code></a> package
to provide direct support for Elliptic Curve Diffie-Hellman key exchange
over NIST curves and Curve25519.
</p>
<p>
Programs should prefer to use <code>crypto/ecdh</code>
or <a href="/pkg/crypto/ecdsa/"><code>crypto/ecdsa</code></a>
instead of the lower-level functionality in <a href="/pkg/crypto/elliptic/"><code>crypto/elliptic</code></a>.
</p>
<h3 id="errors">Wrapping multiple errors</h3>
@ -299,7 +306,7 @@ Do not send CLs removing the interior tags from such phrases.
<h3 id="http_responsecontroller">HTTP ResponseController</h3>
<p>
<p><!-- CL 436890, https://go.dev/issue/54136 -->
The new
<a href="/pkg/net/http/#ResponseController"><code>"net/http".ResponseController</code></a>
type provides access to extended per-request functionality not handled by the
@ -330,9 +337,11 @@ func RequestHandler(w ResponseWriter, r *Request) {
<h3 id="reverseproxy_rewrite">New ReverseProxy Rewrite hook</h3>
<p><!-- https://go.dev/issue/53002 -->
<p><!-- https://go.dev/issue/53002, CL 407214 -->
The <a href="/pkg/net/http/httputil/#ReverseProxy"><code>httputil.ReverseProxy</code></a>
forwarding proxy includes a new <code>Rewrite</code> hook function, superseding the
forwarding proxy includes a new
<a href="/pkg/net/http/httputil/#ReverseProxy.Rewrite"><code>Rewrite</code></a>
hook function, superseding the
previous <code>Director</code> hook.
</p>
@ -356,7 +365,7 @@ func RequestHandler(w ResponseWriter, r *Request) {
also sets the <code>Host</code> header of the outbound request.
</p>
<p><!-- https://go.dev/issue/50465 -->
<p><!-- https://go.dev/issue/50465, CL 407414 -->
The
<a href="/pkg/net/http/httputil/#ProxyRequest.SetXForwarded"><code>ProxyRequest.SetXForwarded</code></a>
method sets the <code>X-Forwarded-For</code>, <code>X-Forwarded-Host</code>,
@ -398,7 +407,7 @@ proxyHandler := &httputil.ReverseProxy{
<dl id="archive/tar"><dt><a href="/pkg/archive/tar/">archive/tar</a></dt>
<dd>
<p><!-- https://go.dev/issue/55356 -->
<p><!-- https://go.dev/issue/55356, CL 449937 -->
When the <code>GODEBUG=tarinsecurepath=0</code> environment variable is set,
<a href="/pkg/archive/tar/#Reader.Next"><code>Reader.Next</code></a> method
will now return the error <a href="/pkg/archive/tar/#ErrInsecurePath"><code>ErrInsecurePath</code></a>
@ -440,7 +449,7 @@ proxyHandler := &httputil.ReverseProxy{
but also report whether the string was trimmed.
</p>
<p><!-- CL 359675 -->
<p><!-- CL 359675, https://go.dev/issue/45038 -->
The new <a href="/pkg/bytes/#Clone"><code>Clone</code></a> function
allocates a copy of a byte slice.
</p>
@ -449,16 +458,38 @@ proxyHandler := &httputil.ReverseProxy{
<dl id="context"><dt><a href="/pkg/context/">context</a></dt>
<dd>
<p><!-- https://go.dev/issue/51365 --><!-- CL 375977 -->
TODO: <a href="https://go.dev/cl/375977">https://go.dev/cl/375977</a>: context: add APIs for writing and reading cancelation cause; modified api/next/51365.txt
<p><!-- https://go.dev/issue/51365, CL 375977 -->
The new <a href="/pkg/context/#WithCancelCause"><code>WithCancelCause</code></a> function
provides a way to cancel a context with a given error.
That error can be retrieved by calling the new <a href="/pkg/context/#Cause"><code>Cause</code></a> function.
</p>
</dd>
</dl><!-- context -->
<dl id="crypto/ecdsa"><dt><a href="/pkg/crypto/ecdsa/">crypto/ecdsa</a></dt>
<dd>
<p><!-- https://go.dev/issue/56088, CL 450816 -->
The new <a href="/pkg/crypto/ecdsa/#PrivateKey.ECDH"><code>PrivateKey.ECDH</code></a> method
converts an <code>ecdsa.PrivateKey</code> to an <code>ecdh.PrivateKey</code>.
</p>
</dd>
</dl><!-- crypto/ecdsa -->
<dl id="crypto/ed25519"><dt><a href="/pkg/crypto/ed25519/">crypto/ed25519</a></dt>
<dd>
<p><!-- CL 373076 -->
TODO: <a href="https://go.dev/cl/373076">https://go.dev/cl/373076</a>: crypto/ed25519: implement Ed25519ph in Sign and VerifyWithOptions; modified api/next/31804.txt
<p><!-- CL 373076, CL 404274, https://go.dev/issue/31804 -->
The <a href="/pkg/crypto/ed25519/#PrivateKey.Sign"><code>PrivateKey.Sign</code></a> method
and the
<a href="/pkg/crypto/ed25519/#VerifyWithOptions"><code>VerifyWithOptions</code></a> function
now support signing pre-hashed messages with Ed25519ph,
indicated by an
<a href="/pkg/crypto/ed25519/#Options.HashFunc"><code>Options.HashFunc</code></a>
that returns
<a href="/pkg/crypto/#SHA512"><code>crypto.SHA512</code></a>.
They also now support Ed25519ctx and Ed25519ph with context,
indicated by setting the new
<a href="/pkg/crypto/ed25519/#Options.Context"><code>Options.Context</code></a>
field.
</p>
</dd>
</dl><!-- crypto/ed25519 -->
@ -466,27 +497,31 @@ proxyHandler := &httputil.ReverseProxy{
<dl id="crypto/elliptic"><dt><a href="/pkg/crypto/elliptic/">crypto/elliptic</a></dt>
<dd>
<p><!-- https://go.dev/issue/34648 -->
TODO: <a href="https://go.dev/issue/34648">https://go.dev/issue/34648</a>: automatically upgrade CurveParams for known curves and deprecate custom ones
Use of custom <a href="/pkg/crypto/elliptic/#Curve"><code>Curve</code></a> implementations
not provided by this package (that is, curves other than
<a href="/pkg/crypto/elliptic/#P224"><code>P224</code></a>,
<a href="/pkg/crypto/elliptic/#P256"><code>P256</code></a>,
<a href="/pkg/crypto/elliptic/#P384"><code>P384</code></a>, and
<a href="/pkg/crypto/elliptic/#P521"><code>P521</code></a>)
is deprecated.
</p>
</dd>
</dl><!-- crypto/elliptic -->
<dl id="crypto/rsa"><dt><a href="/pkg/crypto/rsa/">crypto/rsa</a></dt>
<dd>
<p><!-- CL 418874 --><!-- https://go.dev/issue/19974 -->
TODO: <a href="https://go.dev/issue/19974">https://go.dev/issue/19974</a>: allow hash.Hash for OAEP and MGF1 to be specified independently
<p><!-- CL 418874, https://go.dev/issue/19974 -->
The new field <a href="/pkg/crypto/rsa/#OAEPOptions.MGFHash">OAEPOptions.MGFHash</a>
allows configuring the MGF1 hash separately for OAEP encryption.
</p>
</dd>
</dl><!-- crypto/rsa -->
<dl id="crypto/subtle"><dt><a href="/pkg/crypto/subtle/">crypto/subtle</a></dt>
<dd>
<p><!-- https://go.dev/issue/53021 -->
TODO: <a href="https://go.dev/issue/53021">https://go.dev/issue/53021</a>: add XORBytes
</p>
<p><!-- CL 421435 -->
TODO: <a href="https://go.dev/cl/421435">https://go.dev/cl/421435</a>: crypto/subtle: add XORBytes; modified api/next/53021.txt
<p><!-- https://go.dev/issue/53021, CL 421435 -->
The new function <a href="/pkg/crypto/subtle/#XORBytes">XORBytes</a>
XORs two byte slices together.
</p>
</dd>
</dl><!-- crypto/subtle -->
@ -494,30 +529,60 @@ proxyHandler := &httputil.ReverseProxy{
<dl id="crypto/tls"><dt><a href="/pkg/crypto/tls/">crypto/tls</a></dt>
<dd>
<p><!-- CL 426455 -->
TODO: <a href="https://go.dev/cl/426455">https://go.dev/cl/426455</a>: crypto/tls: use certificate cache in client
The TLS client now shares parsed certificates across all clients actively using that certificate.
The savings can be significant in programs that make many concurrent connections to a
server or collection of servers sharing any part of their certificate chains.
</p>
<p><!-- https://go.dev/issue/48152, CL 449336 -->
For a handshake failure due to a certificate verification failure,
the TLS client and server now return an error of the new type
<a href="/pkg/crypto/tls/#CertificateVerificationError"><code>CertificateVerificationError</code></a>,
which includes the presented certificates.
</p>
</dd>
</dl><!-- crypto/tls -->
<dl id="crypto/x509"><dt><a href="/pkg/crypto/x509/">crypto/x509</a></dt>
<dd>
<p><!-- CL 450816 -->
<a href="/pkg/crypto/x509/#CreateCertificateRequest"><code>CreateCertificateRequest</code></a>
and
<a href="/pkg/crypto/x509/#MarshalPKCS8PrivateKey"><code>MarshalPKCS8PrivateKey</code></a>
now support keys of type <a href="/pkg/crypto/ecdh.PrivateKey"><code>*crypto/ecdh.PrivateKey</code></a>.
<a href="/pkg/crypto/x509/#CreateCertificate"><code>CreateCertificate</code></a>
and
<a href="/pkg/crypto/x509/#MarshalPKIXPublicKey"><code>MarshalPKIXPublicKey</code></a>
now support keys of type <a href="/pkg/crypto/ecdh.PublicKey"><code>*crypto/ecdh.PublicKey</code></a>.
X.509 unmarshaling continues to unmarshal elliptic curve keys into
<code>*ecdsa.PublicKey</code> and <code>*ecdsa.PrivateKey</code>.
Use their new <code>ECDH</code> methods to convert to the <code>crypto/ecdh</code> form.
</p>
<p><!-- CL 449235 -->
The new <a href="/pkg/crypto/x509/#SetFallbackRoots"><code>SetFallbackRoots</code></a>
function allows a program to define a set of fallback root certificates in case the
operating system verifier or standard platform root bundle is unavailable at runtime.
It will most commonly be used with the new TODO LINK TO x/crypto PACKAGE ONCE IT EXISTS.
</p>
</dd>
</dl><!-- crypto/x509 -->
<dl id="debug/elf"><dt><a href="/pkg/debug/elf/">debug/elf</a></dt>
<dd>
<p><!-- CL 429601 -->
Attempts to read from a <code>SHT_NOBITS</code> section using
<a href="/pkg/debug/elf/#Section.Data"><code>Section.Data</code></a>
or the reader returned by <a href="/pkg/debug/elf/#Section.Open"><code>Section.Open</code></a>
now return an error.
</p>
<p><!-- CL 420982 -->
TODO: <a href="https://go.dev/cl/420982">https://go.dev/cl/420982</a>: debug/elf: add new-style LoongArch reloc types; modified api/next/54222.txt
Additional <a href="/pkg/debug/elf/#R_LARCH"><code>R_LARCH_*</code></a> constants are defined for use with LoongArch systems.
</p>
<p><!-- CL 420982, CL 435415, CL 425555 -->
Additional <a href="/pkg/debug/elf/#R_PPC64"><code>R_PPC64_*</code></a> constants are defined for use with PPC64 ELFv2 relocations.
</p>
<p><!-- CL 411915 -->
TODO: <a href="https://go.dev/cl/411915">https://go.dev/cl/411915</a>: debug/elf: fix reloc number of R_PPC64_SECTOFF_LO_DS; modified api/except.txt, api/next/53356.txt
</p>
<p><!-- CL 425555 -->
TODO: <a href="https://go.dev/cl/425555">https://go.dev/cl/425555</a>: debug/elf: define additional PPC64 ELFv2 relocations; modified api/next/54345.txt
</p>
<p><!-- CL 429601 -->
TODO: <a href="https://go.dev/cl/429601">https://go.dev/cl/429601</a>: debug/elf: return error on reading from SHT_NOBITS sections
</p>
<p><!-- CL 435415 -->
TODO: <a href="https://go.dev/cl/435415">https://go.dev/cl/435415</a>: debug/elf: fix typo in R_PPC64_TPREL34 and R_PPC64_DTPREL34; modified api/next/54345.txt
The constant value for <a href="/pkg/debug/elf/#R_PPC64_SECTOFF_LO_DS"><code>R_PPC64_SECTOFF_LO_DS</code></a> is corrected, from 61 to 62.
</p>
</dd>
</dl><!-- debug/elf -->
@ -525,7 +590,7 @@ proxyHandler := &httputil.ReverseProxy{
<dl id="debug/pe"><dt><a href="/pkg/debug/pe/">debug/pe</a></dt>
<dd>
<p><!-- CL 421357 -->
TODO: <a href="https://go.dev/cl/421357">https://go.dev/cl/421357</a>: debug/pe: add IMAGE_FILE_MACHINE_RISCV{32,64,128}; modified api/next/54251.txt
Additional <a href="/pkg/debug/pe/#IMAGE_FILE_MACHINE_RISCV128"><code>IMAGE_FILE_MACHINE_RISCV*</code></a> constants are defined for use with RISC-V systems.
</p>
</dd>
</dl><!-- debug/pe -->
@ -543,12 +608,12 @@ proxyHandler := &httputil.ReverseProxy{
<dl id="encoding/xml"><dt><a href="/pkg/encoding/xml/">encoding/xml</a></dt>
<dd>
<p><!-- https://go.dev/issue/53346 --><!-- CL 424777 -->
<p><!-- https://go.dev/issue/53346, CL 424777 -->
The new <a href="/pkg/encoding/xml/#Encoder.Close"><code>Encoder.Close</code></a> method
can be used to check for unclosed elements when finished encoding.
</p>
<p><!-- CL 103875 --><!-- CL 105636 -->
<p><!-- CL 103875, CL 105636 -->
The decoder now rejects element and attribute names with more than one colon,
such as <code>&lt;a:b:c&gt;</code>,
as well as namespaces that resolve to an empty string, such as <code>xmlns:a=""</code>.
@ -575,7 +640,7 @@ proxyHandler := &httputil.ReverseProxy{
The <a href="/pkg/fmt/#Errorf"><code>Errorf</code></a> function supports multiple occurrences of
the <code>%w</code> format verb, returning an error that unwraps to the list of all arguments to <code>%w</code>.
</p>
<p><!-- https://go.dev/issue/51668 --><!-- CL 400875 -->
<p><!-- https://go.dev/issue/51668, CL 400875 -->
The new <a href="/pkg/fmt/#FormatString"><code>FormatString</code></a> function recovers the
formatting directive corresponding to a <a href="/pkg/fmt/#State"><code>State</code></a>,
which can be useful in <a href="/pkg/fmt/#Formatter"><code>Formatter</code></a>.
@ -586,27 +651,32 @@ proxyHandler := &httputil.ReverseProxy{
<dl id="go/ast"><dt><a href="/pkg/go/ast/">go/ast</a></dt>
<dd>
<p><!-- CL 426091 -->
TODO: <a href="https://go.dev/cl/426091">https://go.dev/cl/426091</a>: go/ast: add Range token.Pos to RangeStmt
<p><!-- CL 426091, https://go.dev/issue/50429 -->
The new <a href="/pkg/go/ast/#RangeStmt.Range"><code>RangeStmt.Range</code></a> field
records the position of the <code>range</code> keyword in a range statement.
</p>
<p><!-- CL 427955 -->
TODO: <a href="https://go.dev/cl/427955">https://go.dev/cl/427955</a>: go/ast: record start and end of file in File.File{Start,End}; modified api/next/53202.txt
<p><!-- CL 427955, https://go.dev/issue/53202 -->
The new <a href="/pkg/go/ast/#File.FileStart"><code>File.FileStart</code></a>
and <a href="/pkg/go/ast/#File.FileEnd"><code>File.FileEnd</code></a> fields
record the position of the start and end of the entire source file.
</p>
</dd>
</dl><!-- go/ast -->
<dl id="go/token"><dt><a href="/pkg/go/token/">go/token</a></dt>
<dd>
<p><!-- CL 410114 -->
TODO: <a href="https://go.dev/cl/410114">https://go.dev/cl/410114</a>: go/token: add (*FileSet).RemoveFile(*File) method
<p><!-- CL 410114, https://go.dev/issue/53200 -->
The new <a href="/pkg/go/token/#FileSet.RemoveFile"><code>FileSet.RemoveFile</code></a> method
removes a file from a <code>FileSet</code>.
Long-running programs can use this to release memory associated
with files they no longer need.
</p>
</dd>
</dl><!-- go/token -->
<dl id="io"><dt><a href="/pkg/io/">io</a></dt>
<dd>
<p><!-- https://go.dev/issue/45899 --><!-- CL 406776 -->
<p><!-- https://go.dev/issue/45899, CL 406776 -->
The new <a href="/pkg/io/#OffsetWriter"><code>OffsetWriter</code></a> wraps an underlying
<a href="/pkg/io/#WriterAt"><code>WriterAt</code></a>
and provides <code>Seek</code>, <code>Write</code>, and <code>WriteAt</code> methods
@ -617,7 +687,7 @@ proxyHandler := &httputil.ReverseProxy{
<dl id="io/fs"><dt><a href="/pkg/io/fs/">io/fs</a></dt>
<dd>
<p><!-- CL 363814 --><!-- https://go.dev/issue/47209 -->
<p><!-- CL 363814, https://go.dev/issue/47209 -->
The new error <a href="/pkg/io/fs/#SkipAll"><code>SkipAll</code></a>
terminates a <a href="/pkg/io/fs/#WalkDir"><code>WalkDir</code></a>
immediately but successfully.
@ -627,7 +697,7 @@ proxyHandler := &httputil.ReverseProxy{
<dl id="math/rand"><dt><a href="/pkg/math/rand/">math/rand</a></dt>
<dd>
<p><!-- https://go.dev/issue/54880 --><!-- CL 436955 -->
<p><!-- https://go.dev/issue/54880, CL 436955, https://go.dev/issue/56319 -->
The <a href="/pkg/math/rand/">math/rand</a> package now automatically seeds
the global random number generator
(used by top-level functions like <code>Float64</code> and <code>Int</code>) with a random value,
@ -639,6 +709,10 @@ proxyHandler := &httputil.ReverseProxy{
Programs that need the earlier consistent global seeding behavior can set
<code>GODEBUG=randautoseed=0</code> in their environment.
</p>
<p><!-- https://go.dev/issue/20661 -->
The top-level <a href="/pkg/math/rand/#Read"><code>Read</code></a> function has been deprecated.
In almost all cases, <a href="/pkg/crypto/rand/#Read"><code>crypto/rand.Read</code></a> is more appropriate.
</p>
</dd>
</dl><!-- math/rand -->
@ -662,7 +736,7 @@ proxyHandler := &httputil.ReverseProxy{
<dl id="net"><dt><a href="/pkg/net/">net</a></dt>
<dd>
<p><!-- https://go.dev/issue/50101 -->
<p><!-- https://go.dev/issue/50101, CL 446179 -->
The <a href="/pkg/net/#LookupCNAME"><code>LookupCNAME</code></a>
function now consistently returns the contents
of a <code>CNAME</code> record when one exists. Previously on Unix systems and
@ -674,14 +748,14 @@ proxyHandler := &httputil.ReverseProxy{
<code>CNAME</code> exists.
</p>
<p><!-- https://go.dev/issue/53482 -->
<p><!-- https://go.dev/issue/53482, CL 413454 -->
<a href="/pkg/net/#Interface.Flags"><code>Interface.Flags</code></a> now includes the new flag <code>FlagRunning</code>,
indicating an operationally active interface. An interface which is administratively
configured but not active (for example, because the network cable is not connected)
will have <code>FlagUp</code> set but not <code>FlagRunning</code>.
</p>
<p><!-- https://go.dev/issue/55301 -->
<p><!-- https://go.dev/issue/55301, CL 444955 -->
The new <a href="/pkg/net/#Dialer.ControlContext"><code>Dialer.ControlContext</code></a> field contains a callback function
similar to the existing <a href="/pkg/net/#Dialer.Control"><code>Dialer.Control</code></a> hook, that additionally
accepts the dial context as a parameter.
@ -706,34 +780,23 @@ proxyHandler := &httputil.ReverseProxy{
<dl id="net/http"><dt><a href="/pkg/net/http/">net/http</a></dt>
<dd>
<p><!-- https://go.dev/issue/541360 -->
The new <a href="/pkg/net/http/#ResponseController"><code>ResponseController</code></a> type provides access to extended per-request
functionality not handled by the <a href="/pkg/net/http/#ResponseWriter"><code>ResponseWriter<code></a> interface.
<p>
<p>
The new <a href="/pkg/net/http/#ResponseController.SetReadDeadline"><code>ResponseController.SetReadDeadline</code></a> and
<a href="/pkg/net/http/#ResponseController.SetWriteDeadline"><code>ResponseController.SetWriteDeadline</code></a> methods permit setting
per-request read and write deadlines.
</p>
<p><!-- https://go.dev/issue/51914 -->
The <a href="/pkg/net/http/#ResponseWriter.WriteHeader"><code>ResponseWriter.WriteHeader</code></a> function now supports sending
<code>1xx</code> status codes.
</p>
<p><!-- https://go.dev/issue/41773 -->
<p><!-- https://go.dev/issue/41773, CL 356410 -->
The new <a href="/pkg/net/http/#Server.DisableGeneralOptionsHandler"><code>Server.DisableGeneralOptionsHandler</code></a> configuration setting
allows disabling the default <code>OPTIONS *</code> handler.
</p>
<p><!-- https://go.dev/issue/54299 -->
<p><!-- https://go.dev/issue/54299, CL 447216 -->
The new <a href="/pkg/net/http/#Transport.OnProxyConnectResponse"><code>Transport.OnProxyConnectResponse</code></a> hook is called
when a <code>Transport</code> receives an HTTP response from a proxy
for a <code>CONNECT</code> request.
</p>
<p><!-- https://go.dev/issue/53960 -->
<p><!-- https://go.dev/issue/53960, CL 418614 -->
The HTTP server now accepts HEAD requests containing a body,
rather than rejecting them as invalid.
</p>
@ -755,7 +818,7 @@ proxyHandler := &httputil.ReverseProxy{
<dl id="net/netip"><dt><a href="/pkg/net/netip/">net/netip</a></dt>
<dd>
<p><!-- https://go.dev/issue/51766 --><!-- https://go.dev/issue/51777 --><!-- CL 412475 -->
<p><!-- https://go.dev/issue/51766, https://go.dev/issue/51777, CL 412475 -->
The new <a href="/pkg/net/netip/#IPv6LinkLocalAllRouters">IPv6LinkLocalAllRouters</a>
and <a href="/pkg/net/netip/#IPv6Loopback">IPv6Loopback</a> functions
are the <code>net/netip</code> equivalents of
@ -768,7 +831,9 @@ proxyHandler := &httputil.ReverseProxy{
<dl id="os"><dt><a href="/pkg/os/">os</a></dt>
<dd>
<p><!-- CL 448897 -->
TODO: <a href="https://go.dev/cl/448897">https://go.dev/cl/448897</a>: os: remove special casing of NUL in Windows file operations
On Windows, the name <code>NUL</code> is no longer treated as a special case in
<a href="/pkg/os/#Mkdir"><code>Mkdir</code></a> and
<a href="/pkg/os/#Stat"><code>Stat</code></a>.
</p>
<p><!-- https://go.dev/issue/52747, CL 405275 -->
On Windows, <a href="/pkg/os/#File.Stat"><code>File.Stat</code></a>
@ -801,12 +866,12 @@ proxyHandler := &httputil.ReverseProxy{
<dl id="path/filepath"><dt><a href="/pkg/path/filepath/">path/filepath</a></dt>
<dd>
<p><!-- CL 363814 --><!-- https://go.dev/issue/47209 -->
<p><!-- CL 363814, https://go.dev/issue/47209 -->
The new error <a href="/pkg/path/filepath/#SkipAll"><code>SkipAll</code></a>
terminates a <a href="/pkg/path/filepath/#Walk"><code>Walk</code></a>
immediately but successfully.
</p>
<p><!-- https://go.dev/issue/56219 -->
<p><!-- https://go.dev/issue/56219, CL 449239 -->
The new <a href="/pkg/path/filepath/#IsLocal"><code>IsLocal</code></a> function reports whether a path is
lexically local to a directory.
For example, if <code>IsLocal(p)</code> is <code>true</code>,
@ -818,19 +883,19 @@ proxyHandler := &httputil.ReverseProxy{
<dl id="reflect"><dt><a href="/pkg/reflect/">reflect</a></dt>
<dd>
<p><!-- https://go.dev/issue/46746 --><!-- CL 423794 -->
<p><!-- https://go.dev/issue/46746, CL 423794 -->
The new <a href="/pkg/reflect/#Value.Comparable"><code>Value.Comparable</code></a> and
<a href="/pkg/reflect/#Value.Equal"><code>Value.Equal</code></a> methods
can be used to compare two <code>Value</code>s for equality.
<code>Comparable</code> reports whether <code>Equal</code> is a valid operation for a given <code>Value</code> receiver.
</p>
<p><!-- https://go.dev/issue/48000 --><!-- CL 389635 -->
<p><!-- https://go.dev/issue/48000, CL 389635 -->
The new <a href="/pkg/reflect/#Value.Grow"><code>Value.Grow</code></a> method
extends a slice to guarantee space for another <code>n</code> elements.
</p>
<p><!-- https://go.dev/issue/52376 --><!-- CL 411476 -->
<p><!-- https://go.dev/issue/52376, CL 411476 -->
The new <a href="/pkg/reflect/#Value.SetZero"><code>Value.SetZero</code></a> method
sets a value to be the zero value for its type.
</p>
@ -861,14 +926,17 @@ proxyHandler := &httputil.ReverseProxy{
<dl id="runtime/metrics"><dt><a href="/pkg/runtime/metrics/">runtime/metrics</a></dt>
<dd>
<p><!-- https://go.dev/issue/47216 -->
TODO: <a href="https://go.dev/issue/47216">https://go.dev/issue/47216</a>: add GOMAXPROCS, NumCgoCall, GC CPU time
Go 1.20 adds new <a href="/pkg/runtime/metrics/#hdr-Supported_metrics">supported metrics</a>,
including the current <code>GOMAXPROCS</code> setting (<code>/sched/gomaxprocs:threads</code>),
the number of cgo calls executed (<code>/cgo/go-to-c-calls:calls</code>),
and various measures of time spent in garbage collection.
</p>
</dd>
</dl><!-- runtime/metrics -->
<dl id="strings"><dt><a href="/pkg/strings/">strings</a></dt>
<dd>
<p><!-- CL 407176 -->
<p><!-- CL 407176, https://go.dev/issue/42537 -->
The new
<a href="/pkg/bytes/#CutPrefix"><code>CutPrefix</code></a> and
<a href="/pkg/bytes/#CutSuffix"><code>CutSuffix</code></a> functions
@ -877,7 +945,7 @@ proxyHandler := &httputil.ReverseProxy{
but also report whether the string was trimmed.
</p>
<p><!-- CL 359675 -->
<p><!-- CL 359675, https://go.dev/issue/45038 -->
The new <a href="/pkg/strings/#Clone"><code>Clone</code></a> function
allocates a copy of a string.
</p>
@ -897,16 +965,17 @@ proxyHandler := &httputil.ReverseProxy{
<dl id="syscall"><dt><a href="/pkg/syscall/">syscall</a></dt>
<dd>
<p><!-- CL 407574 -->
TODO: <a href="https://go.dev/cl/407574">https://go.dev/cl/407574</a>: syscall: add new CLONE_ flags for Linux
</p>
<p><!-- CL 411596 -->
TODO: <a href="https://go.dev/cl/411596">https://go.dev/cl/411596</a>: syscall: remove FreeBSD 11 and below 64bit inode compatibility shims
On FreeBSD, compatibility shims needed for FreeBSD 11 and earlier have been removed.
</p>
<p><!-- CL 407574 -->
On Linux, additional <a href="/pkg/syscall/#CLONE_CLEAR_SIGHAND"><code>CLONE_*</code></a> constants
are defined for use with the <a href="/pkg/syscall/#SysProcAttr.Cloneflags"><code>SysProcAttr.Cloneflags</code></a> field.
</p>
<p><!-- CL 417695 -->
TODO: <a href="https://go.dev/cl/417695">https://go.dev/cl/417695</a>: syscall: add CgroupFD support for ForkExec on Linux
On Linux, the new <a href="/pkg/syscall/#SysProcAttr.CgroupFD"><code>SysProcAttr.CgroupFD</code></a>
and <a href="/pkg/syscall/#SysProcAttr.UseCgroupFD"><code>SysProcAttr.UseCgroupFD</code></a> fields
provide a way to place a child process into a specific cgroup.
</p>
</dd>
</dl><!-- syscall -->
@ -923,14 +992,14 @@ proxyHandler := &httputil.ReverseProxy{
<dl id="time"><dt><a href="/pkg/time/">time</a></dt>
<dd>
<p><!-- https://go.dev/issue/52746 --><!-- CL 412495 -->
<p><!-- https://go.dev/issue/52746, CL 412495 -->
The new time layout constants <a href="/pkg/time/#DateTime"><code>DateTime</code></a>,
<a href="/pkg/time/#DateOnly"><code>DateOnly</code></a>, and
<a href="/pkg/time/#TimeOnly"><code>TimeOnly</code></a>
provide names for three of the most common layout strings used in a survey of public Go source code.
</p>
<p><!-- CL 382734 --><!-- https://go.dev/issue/50770 -->
<p><!-- CL 382734, https://go.dev/issue/50770 -->
The new <a href="/pkg/time/#Time.Compare"><code>Time.Compare</code></a> method
compares two times.
</p>
@ -951,7 +1020,7 @@ proxyHandler := &httputil.ReverseProxy{
<dl id="unicode/utf16"><dt><a href="/pkg/unicode/utf16/">unicode/utf16</a></dt>
<dd>
<p><!-- https://go.dev/issue/51896 --><!-- CL 409054 -->
<p><!-- https://go.dev/issue/51896, CL 409054 -->
The new <a href="/pkg/unicode/utf16/#AppendRune"><code>AppendRune</code></a>
function appends the UTF-16 encoding of a given rune to a uint16 slice,
analogous to <a href="/pkg/unicode/utf8/#AppendRune"><code>utf8.AppendRune</code></a>.
@ -962,7 +1031,7 @@ proxyHandler := &httputil.ReverseProxy{
<!-- Silence false positives from x/build/cmd/relnote: -->
<!-- https://go.dev/issue/45964 was documented in Go 1.18 release notes but closed recently -->
<!-- https://go.dev/issue/52114 is an accepted proposal to add golang.org/x/net/http2.Transport.DialTLSContext; it's not a part of the Go release -->
<!-- CL 431335: cmd/api: make check pickier about api/*.txt; modified api/next/42537.txt, api/next/43620.txt, api/next/45899.txt, api/next/46746.txt, api/next/50429.txt, api/next/51896.txt, api/next/53482.txt -->
<!-- CL 431335: cmd/api: make check pickier about api/*.txt -->
<!-- CL 447896 api: add newline to 55301.txt; modified api/next/55301.txt -->
<!-- CL 449215 api/next/54299: add missing newline; modified api/next/54299.txt -->
<!-- CL 433057 cmd: update vendored golang.org/x/tools for multiple error wrapping -->
@ -976,3 +1045,9 @@ proxyHandler := &httputil.ReverseProxy{
<!-- https://go.dev/issue/46731: replace `//go:notinheap` with runtime/internal/sys.NotInHeap -->
<!-- CL 345488 strconv optimization -->
<!-- CL 428757 reflect deprecation, rolled back -->
<!-- https://go.dev/issue/49390 compile -l -N is fully supported -->
<!-- https://go.dev/issue/54619 x/tools -->
<!-- CL 448898 reverted -->
<!-- https://go.dev/issue/54850 x/net/http2 Transport.MaxReadFrameSize -->
<!-- https://go.dev/issue/56054 x/net/http2 SETTINGS_HEADER_TABLE_SIZE -->
<!-- CL 450375 reverted -->