diff --git a/_content/doc/go1.10.md b/_content/doc/go1.10.md
index 1967dcc..6fc1ebf 100644
--- a/_content/doc/go1.10.md
+++ b/_content/doc/go1.10.md
@@ -521,603 +521,603 @@
 made with the Go 1 [promise of compatibility](/doc/go1compat)
 in mind.
 
-[archive/tar](/pkg/archive/tar/)
+#### [archive/tar](/pkg/archive/tar/)
 
-:   In general, the handling of special header formats is significantly improved and expanded.
+In general, the handling of special header formats is significantly improved and expanded.
 
-    [`FileInfoHeader`](/pkg/archive/tar/#FileInfoHeader) has always
-    recorded the Unix UID and GID numbers from its [`os.FileInfo`](/pkg/os/#FileInfo) argument
-    (specifically, from the system-dependent information returned by the `FileInfo`'s `Sys` method)
-    in the returned [`Header`](/pkg/archive/tar/#Header).
-    Now it also records the user and group names corresponding to those IDs,
-    as well as the major and minor device numbers for device files.
+[`FileInfoHeader`](/pkg/archive/tar/#FileInfoHeader) has always
+recorded the Unix UID and GID numbers from its [`os.FileInfo`](/pkg/os/#FileInfo) argument
+(specifically, from the system-dependent information returned by the `FileInfo`'s `Sys` method)
+in the returned [`Header`](/pkg/archive/tar/#Header).
+Now it also records the user and group names corresponding to those IDs,
+as well as the major and minor device numbers for device files.
 
-    The new [`Header.Format`](/pkg/archive/tar/#Header) field
-    of type [`Format`](/pkg/archive/tar/#Format)
-    controls which tar header format the [`Writer`](/pkg/archive/tar/#Writer) uses.
-    The default, as before, is to select the most widely-supported header type
-    that can encode the fields needed by the header (USTAR if possible, or else PAX if possible, or else GNU).
-    The [`Reader`](/pkg/archive/tar/#Reader) sets `Header.Format` for each header it reads.
+The new [`Header.Format`](/pkg/archive/tar/#Header) field
+of type [`Format`](/pkg/archive/tar/#Format)
+controls which tar header format the [`Writer`](/pkg/archive/tar/#Writer) uses.
+The default, as before, is to select the most widely-supported header type
+that can encode the fields needed by the header (USTAR if possible, or else PAX if possible, or else GNU).
+The [`Reader`](/pkg/archive/tar/#Reader) sets `Header.Format` for each header it reads.
 
-    `Reader` and the `Writer` now support arbitrary PAX records,
-    using the new [`Header.PAXRecords`](/pkg/archive/tar/#Header) field,
-    a generalization of the existing `Xattrs` field.
+`Reader` and the `Writer` now support arbitrary PAX records,
+using the new [`Header.PAXRecords`](/pkg/archive/tar/#Header) field,
+a generalization of the existing `Xattrs` field.
 
-    The `Reader` no longer insists that the file name or link name in GNU headers
-    be valid UTF-8.
+The `Reader` no longer insists that the file name or link name in GNU headers
+be valid UTF-8.
 
-    When writing PAX- or GNU-format headers, the `Writer` now includes
-    the `Header.AccessTime` and `Header.ChangeTime` fields (if set).
-    When writing PAX-format headers, the times include sub-second precision.
+When writing PAX- or GNU-format headers, the `Writer` now includes
+the `Header.AccessTime` and `Header.ChangeTime` fields (if set).
+When writing PAX-format headers, the times include sub-second precision.
 
-[archive/zip](/pkg/archive/zip/)
+#### [archive/zip](/pkg/archive/zip/)
 
-:   Go 1.10 adds more complete support for times and character set encodings in ZIP archives.
+Go 1.10 adds more complete support for times and character set encodings in ZIP archives.
 
-    The original ZIP format used the standard MS-DOS encoding of year, month, day, hour, minute, and second into fields in two 16-bit values.
-    That encoding cannot represent time zones or odd seconds, so multiple extensions have been
-    introduced to allow richer encodings.
-    In Go 1.10, the [`Reader`](/pkg/archive/zip/#Reader) and [`Writer`](/pkg/archive/zip/#Writer)
-    now support the widely-understood Info-Zip extension that encodes the time separately in the 32-bit Unix “seconds since epoch” form.
-    The [`FileHeader`](/pkg/archive/zip/#FileHeader)'s new `Modified` field of type [`time.Time`](/pkg/time/#Time)
-    obsoletes the `ModifiedTime` and `ModifiedDate` fields, which continue to hold the MS-DOS encoding.
-    The `Reader` and `Writer` now adopt the common
-    convention that a ZIP archive storing a time zone-independent Unix time
-    also stores the local time in the MS-DOS field,
-    so that the time zone offset can be inferred.
-    For compatibility, the [`ModTime`](/pkg/archive/zip/#FileHeader.ModTime) and
-    [`SetModTime`](/pkg/archive/zip/#FileHeader.SetModTime) methods
-    behave the same as in earlier releases; new code should use `Modified` directly.
+The original ZIP format used the standard MS-DOS encoding of year, month, day, hour, minute, and second into fields in two 16-bit values.
+That encoding cannot represent time zones or odd seconds, so multiple extensions have been
+introduced to allow richer encodings.
+In Go 1.10, the [`Reader`](/pkg/archive/zip/#Reader) and [`Writer`](/pkg/archive/zip/#Writer)
+now support the widely-understood Info-Zip extension that encodes the time separately in the 32-bit Unix “seconds since epoch” form.
+The [`FileHeader`](/pkg/archive/zip/#FileHeader)'s new `Modified` field of type [`time.Time`](/pkg/time/#Time)
+obsoletes the `ModifiedTime` and `ModifiedDate` fields, which continue to hold the MS-DOS encoding.
+The `Reader` and `Writer` now adopt the common
+convention that a ZIP archive storing a time zone-independent Unix time
+also stores the local time in the MS-DOS field,
+so that the time zone offset can be inferred.
+For compatibility, the [`ModTime`](/pkg/archive/zip/#FileHeader.ModTime) and
+[`SetModTime`](/pkg/archive/zip/#FileHeader.SetModTime) methods
+behave the same as in earlier releases; new code should use `Modified` directly.
 
-    The header for each file in a ZIP archive has a flag bit indicating whether
-    the name and comment fields are encoded as UTF-8, as opposed to a system-specific default encoding.
-    In Go 1.8 and earlier, the `Writer` never set the UTF-8 bit.
-    In Go 1.9, the `Writer` changed to set the UTF-8 bit almost always.
-    This broke the creation of ZIP archives containing Shift-JIS file names.
-    In Go 1.10, the `Writer` now sets the UTF-8 bit only when
-    both the name and the comment field are valid UTF-8 and at least one is non-ASCII.
-    Because non-ASCII encodings very rarely look like valid UTF-8, the new
-    heuristic should be correct nearly all the time.
-    Setting a `FileHeader`'s new `NonUTF8` field to true
-    disables the heuristic entirely for that file.
+The header for each file in a ZIP archive has a flag bit indicating whether
+the name and comment fields are encoded as UTF-8, as opposed to a system-specific default encoding.
+In Go 1.8 and earlier, the `Writer` never set the UTF-8 bit.
+In Go 1.9, the `Writer` changed to set the UTF-8 bit almost always.
+This broke the creation of ZIP archives containing Shift-JIS file names.
+In Go 1.10, the `Writer` now sets the UTF-8 bit only when
+both the name and the comment field are valid UTF-8 and at least one is non-ASCII.
+Because non-ASCII encodings very rarely look like valid UTF-8, the new
+heuristic should be correct nearly all the time.
+Setting a `FileHeader`'s new `NonUTF8` field to true
+disables the heuristic entirely for that file.
 
-    The `Writer` also now supports setting the end-of-central-directory record's comment field,
-    by calling the `Writer`'s new [`SetComment`](/pkg/archive/zip/#Writer.SetComment) method.
+The `Writer` also now supports setting the end-of-central-directory record's comment field,
+by calling the `Writer`'s new [`SetComment`](/pkg/archive/zip/#Writer.SetComment) method.
 
-[bufio](/pkg/bufio/)
+#### [bufio](/pkg/bufio/)
 
-:   The new [`Reader.Size`](/pkg/bufio/#Reader.Size)
-    and [`Writer.Size`](/pkg/bufio/#Writer.Size)
-    methods report the `Reader` or `Writer`'s underlying buffer size.
+The new [`Reader.Size`](/pkg/bufio/#Reader.Size)
+and [`Writer.Size`](/pkg/bufio/#Writer.Size)
+methods report the `Reader` or `Writer`'s underlying buffer size.
 
-[bytes](/pkg/bytes/)
+#### [bytes](/pkg/bytes/)
 
-:   The
-    [`Fields`](/pkg/bytes/#Fields),
-    [`FieldsFunc`](/pkg/bytes/#FieldsFunc),
-    [`Split`](/pkg/bytes/#Split),
-    and
-    [`SplitAfter`](/pkg/bytes/#SplitAfter)
-    functions have always returned subslices of their inputs.
-    Go 1.10 changes each returned subslice to have capacity equal to its length,
-    so that appending to one cannot overwrite adjacent data in the original input.
+The
+[`Fields`](/pkg/bytes/#Fields),
+[`FieldsFunc`](/pkg/bytes/#FieldsFunc),
+[`Split`](/pkg/bytes/#Split),
+and
+[`SplitAfter`](/pkg/bytes/#SplitAfter)
+functions have always returned subslices of their inputs.
+Go 1.10 changes each returned subslice to have capacity equal to its length,
+so that appending to one cannot overwrite adjacent data in the original input.
 
-[crypto/cipher](/pkg/crypto/cipher/)
+#### [crypto/cipher](/pkg/crypto/cipher/)
 
-:   [`NewOFB`](/pkg/crypto/cipher/#NewOFB) now panics if given
-    an initialization vector of incorrect length, like the other constructors in the
-    package always have.
-    (Previously it returned a nil `Stream` implementation.)
+[`NewOFB`](/pkg/crypto/cipher/#NewOFB) now panics if given
+an initialization vector of incorrect length, like the other constructors in the
+package always have.
+(Previously it returned a nil `Stream` implementation.)
 
-[crypto/tls](/pkg/crypto/tls/)
+#### [crypto/tls](/pkg/crypto/tls/)
 
-:   The TLS server now advertises support for SHA-512 signatures when using TLS 1.2.
-    The server already supported the signatures, but some clients would not select
-    them unless explicitly advertised.
+The TLS server now advertises support for SHA-512 signatures when using TLS 1.2.
+The server already supported the signatures, but some clients would not select
+them unless explicitly advertised.
 
-[crypto/x509](/pkg/crypto/x509/)
+#### [crypto/x509](/pkg/crypto/x509/)
 
-:   [`Certificate.Verify`](/pkg/crypto/x509/#Certificate.Verify)
-    now enforces the name constraints for all
-    names contained in the certificate, not just the one name that a client has asked about.
-    Extended key usage restrictions are similarly now checked all at once.
-    As a result, after a certificate has been validated, now it can be trusted in its entirety.
-    It is no longer necessary to revalidate the certificate for each additional name
-    or key usage.
+[`Certificate.Verify`](/pkg/crypto/x509/#Certificate.Verify)
+now enforces the name constraints for all
+names contained in the certificate, not just the one name that a client has asked about.
+Extended key usage restrictions are similarly now checked all at once.
+As a result, after a certificate has been validated, now it can be trusted in its entirety.
+It is no longer necessary to revalidate the certificate for each additional name
+or key usage.
 
-    Parsed certificates also now report URI names and IP, email, and URI constraints, using the new
-    [`Certificate`](/pkg/crypto/x509/#Certificate) fields
-    `URIs`, `PermittedIPRanges`, `ExcludedIPRanges`,
-    `PermittedEmailAddresses`, `ExcludedEmailAddresses`,
-    `PermittedURIDomains`, and `ExcludedURIDomains`. Certificates with
-    invalid values for those fields are now rejected.
+Parsed certificates also now report URI names and IP, email, and URI constraints, using the new
+[`Certificate`](/pkg/crypto/x509/#Certificate) fields
+`URIs`, `PermittedIPRanges`, `ExcludedIPRanges`,
+`PermittedEmailAddresses`, `ExcludedEmailAddresses`,
+`PermittedURIDomains`, and `ExcludedURIDomains`. Certificates with
+invalid values for those fields are now rejected.
 
-    The new [`MarshalPKCS1PublicKey`](/pkg/crypto/x509/#MarshalPKCS1PublicKey)
-    and [`ParsePKCS1PublicKey`](/pkg/crypto/x509/#ParsePKCS1PublicKey)
-    functions convert an RSA public key to and from PKCS#1-encoded form.
+The new [`MarshalPKCS1PublicKey`](/pkg/crypto/x509/#MarshalPKCS1PublicKey)
+and [`ParsePKCS1PublicKey`](/pkg/crypto/x509/#ParsePKCS1PublicKey)
+functions convert an RSA public key to and from PKCS#1-encoded form.
 
-    The new [`MarshalPKCS8PrivateKey`](/pkg/crypto/x509/#MarshalPKCS8PrivateKey)
-    function converts a private key to PKCS#8-encoded form.
-    ([`ParsePKCS8PrivateKey`](/pkg/crypto/x509/#ParsePKCS8PrivateKey)
-    has existed since Go 1.)
+The new [`MarshalPKCS8PrivateKey`](/pkg/crypto/x509/#MarshalPKCS8PrivateKey)
+function converts a private key to PKCS#8-encoded form.
+([`ParsePKCS8PrivateKey`](/pkg/crypto/x509/#ParsePKCS8PrivateKey)
+has existed since Go 1.)
 
-[crypto/x509/pkix](/pkg/crypto/x509/pkix/)
+#### [crypto/x509/pkix](/pkg/crypto/x509/pkix/)
 
-:   [`Name`](/pkg/crypto/x509/pkix/#Name) now implements a
-    [`String`](/pkg/crypto/x509/pkix/#Name.String) method that
-    formats the X.509 distinguished name in the standard RFC 2253 format.
+[`Name`](/pkg/crypto/x509/pkix/#Name) now implements a
+[`String`](/pkg/crypto/x509/pkix/#Name.String) method that
+formats the X.509 distinguished name in the standard RFC 2253 format.
 
-[database/sql/driver](/pkg/database/sql/driver/)
+#### [database/sql/driver](/pkg/database/sql/driver/)
 
-:   Drivers that currently hold on to the destination buffer provided by
-    [`driver.Rows.Next`](/pkg/database/sql/driver/#Rows.Next) should ensure they no longer
-    write to a buffer assigned to the destination array outside of that call.
-    Drivers must be careful that underlying buffers are not modified when closing
-    [`driver.Rows`](/pkg/database/sql/driver/#Rows).
+Drivers that currently hold on to the destination buffer provided by
+[`driver.Rows.Next`](/pkg/database/sql/driver/#Rows.Next) should ensure they no longer
+write to a buffer assigned to the destination array outside of that call.
+Drivers must be careful that underlying buffers are not modified when closing
+[`driver.Rows`](/pkg/database/sql/driver/#Rows).
 
-    Drivers that want to construct a [`sql.DB`](/pkg/database/sql/#DB) for
-    their clients can now implement the [`Connector`](/pkg/database/sql/driver/#Connector) interface
-    and call the new [`sql.OpenDB`](/pkg/database/sql/#OpenDB) function,
-    instead of needing to encode all configuration into a string
-    passed to [`sql.Open`](/pkg/database/sql/#Open).
+Drivers that want to construct a [`sql.DB`](/pkg/database/sql/#DB) for
+their clients can now implement the [`Connector`](/pkg/database/sql/driver/#Connector) interface
+and call the new [`sql.OpenDB`](/pkg/database/sql/#OpenDB) function,
+instead of needing to encode all configuration into a string
+passed to [`sql.Open`](/pkg/database/sql/#Open).
 
-    Drivers that want to parse the configuration string only once per `sql.DB`
-    instead of once per [`sql.Conn`](/pkg/database/sql/#Conn),
-    or that want access to each `sql.Conn`'s underlying context,
-    can make their [`Driver`](/pkg/database/sql/driver/#Driver)
-    implementations also implement [`DriverContext`](/pkg/database/sql/driver/#DriverContext)'s
-    new `OpenConnector` method.
+Drivers that want to parse the configuration string only once per `sql.DB`
+instead of once per [`sql.Conn`](/pkg/database/sql/#Conn),
+or that want access to each `sql.Conn`'s underlying context,
+can make their [`Driver`](/pkg/database/sql/driver/#Driver)
+implementations also implement [`DriverContext`](/pkg/database/sql/driver/#DriverContext)'s
+new `OpenConnector` method.
 
-    Drivers that implement [`ExecerContext`](/pkg/database/sql/driver/#ExecerContext)
-    no longer need to implement [`Execer`](/pkg/database/sql/driver/#Execer);
-    similarly, drivers that implement [`QueryerContext`](/pkg/database/sql/driver/#QueryerContext)
-    no longer need to implement [`Queryer`](/pkg/database/sql/driver/#Queryer).
-    Previously, even if the context-based interfaces were implemented they were ignored
-    unless the non-context-based interfaces were also implemented.
+Drivers that implement [`ExecerContext`](/pkg/database/sql/driver/#ExecerContext)
+no longer need to implement [`Execer`](/pkg/database/sql/driver/#Execer);
+similarly, drivers that implement [`QueryerContext`](/pkg/database/sql/driver/#QueryerContext)
+no longer need to implement [`Queryer`](/pkg/database/sql/driver/#Queryer).
+Previously, even if the context-based interfaces were implemented they were ignored
+unless the non-context-based interfaces were also implemented.
 
-    To allow drivers to better isolate different clients using a cached driver connection in succession,
-    if a [`Conn`](/pkg/database/sql/driver/#Conn) implements the new
-    [`SessionResetter`](/pkg/database/sql/driver/#SessionResetter) interface,
-    `database/sql` will now call `ResetSession` before
-    reusing the `Conn` for a new client.
+To allow drivers to better isolate different clients using a cached driver connection in succession,
+if a [`Conn`](/pkg/database/sql/driver/#Conn) implements the new
+[`SessionResetter`](/pkg/database/sql/driver/#SessionResetter) interface,
+`database/sql` will now call `ResetSession` before
+reusing the `Conn` for a new client.
 
-[debug/elf](/pkg/debug/elf/)
+#### [debug/elf](/pkg/debug/elf/)
 
-:   This release adds 348 new relocation constants divided between the relocation types
-    [`R_386`](/pkg/debug/elf/#R_386),
-    [`R_AARCH64`](/pkg/debug/elf/#R_AARCH64),
-    [`R_ARM`](/pkg/debug/elf/#R_ARM),
-    [`R_PPC64`](/pkg/debug/elf/#R_PPC64),
-    and
-    [`R_X86_64`](/pkg/debug/elf/#R_X86_64).
+This release adds 348 new relocation constants divided between the relocation types
+[`R_386`](/pkg/debug/elf/#R_386),
+[`R_AARCH64`](/pkg/debug/elf/#R_AARCH64),
+[`R_ARM`](/pkg/debug/elf/#R_ARM),
+[`R_PPC64`](/pkg/debug/elf/#R_PPC64),
+and
+[`R_X86_64`](/pkg/debug/elf/#R_X86_64).
 
-[debug/macho](/pkg/debug/macho/)
+#### [debug/macho](/pkg/debug/macho/)
 
-:   Go 1.10 adds support for reading relocations from Mach-O sections,
-    using the [`Section`](/pkg/debug/macho#Section) struct's new `Relocs` field
-    and the new [`Reloc`](/pkg/debug/macho/#Reloc),
-    [`RelocTypeARM`](/pkg/debug/macho/#RelocTypeARM),
-    [`RelocTypeARM64`](/pkg/debug/macho/#RelocTypeARM64),
-    [`RelocTypeGeneric`](/pkg/debug/macho/#RelocTypeGeneric),
-    and
-    [`RelocTypeX86_64`](/pkg/debug/macho/#RelocTypeX86_64)
-    types and associated constants.
+Go 1.10 adds support for reading relocations from Mach-O sections,
+using the [`Section`](/pkg/debug/macho#Section) struct's new `Relocs` field
+and the new [`Reloc`](/pkg/debug/macho/#Reloc),
+[`RelocTypeARM`](/pkg/debug/macho/#RelocTypeARM),
+[`RelocTypeARM64`](/pkg/debug/macho/#RelocTypeARM64),
+[`RelocTypeGeneric`](/pkg/debug/macho/#RelocTypeGeneric),
+and
+[`RelocTypeX86_64`](/pkg/debug/macho/#RelocTypeX86_64)
+types and associated constants.
 
-    Go 1.10 also adds support for the `LC_RPATH` load command,
-    represented by the types
-    [`RpathCmd`](/pkg/debug/macho/#RpathCmd) and
-    [`Rpath`](/pkg/debug/macho/#Rpath),
-    and new [named constants](/pkg/debug/macho/#pkg-constants)
-    for the various flag bits found in headers.
+Go 1.10 also adds support for the `LC_RPATH` load command,
+represented by the types
+[`RpathCmd`](/pkg/debug/macho/#RpathCmd) and
+[`Rpath`](/pkg/debug/macho/#Rpath),
+and new [named constants](/pkg/debug/macho/#pkg-constants)
+for the various flag bits found in headers.
 
-[encoding/asn1](/pkg/encoding/asn1/)
+#### [encoding/asn1](/pkg/encoding/asn1/)
 
-:   [`Marshal`](/pkg/encoding/asn1/#Marshal) now correctly encodes
-    strings containing asterisks as type UTF8String instead of PrintableString,
-    unless the string is in a struct field with a tag forcing the use of PrintableString.
-    `Marshal` also now respects struct tags containing `application` directives.
+[`Marshal`](/pkg/encoding/asn1/#Marshal) now correctly encodes
+strings containing asterisks as type UTF8String instead of PrintableString,
+unless the string is in a struct field with a tag forcing the use of PrintableString.
+`Marshal` also now respects struct tags containing `application` directives.
 
-    The new [`MarshalWithParams`](/pkg/encoding/asn1/#MarshalWithParams)
-    function marshals its argument as if the additional params were its associated
-    struct field tag.
+The new [`MarshalWithParams`](/pkg/encoding/asn1/#MarshalWithParams)
+function marshals its argument as if the additional params were its associated
+struct field tag.
 
-    [`Unmarshal`](/pkg/encoding/asn1/#Unmarshal) now respects
-    struct field tags using the `explicit` and `tag`
-    directives.
+[`Unmarshal`](/pkg/encoding/asn1/#Unmarshal) now respects
+struct field tags using the `explicit` and `tag`
+directives.
 
-    Both `Marshal` and `Unmarshal` now support a new struct field tag
-    `numeric`, indicating an ASN.1 NumericString.
+Both `Marshal` and `Unmarshal` now support a new struct field tag
+`numeric`, indicating an ASN.1 NumericString.
 
-[encoding/csv](/pkg/encoding/csv/)
+#### [encoding/csv](/pkg/encoding/csv/)
 
-:   [`Reader`](/pkg/encoding/csv/#Reader) now disallows the use of
-    nonsensical `Comma` and `Comment` settings,
-    such as NUL, carriage return, newline, invalid runes, and the Unicode replacement character,
-    or setting `Comma` and `Comment` equal to each other.
+[`Reader`](/pkg/encoding/csv/#Reader) now disallows the use of
+nonsensical `Comma` and `Comment` settings,
+such as NUL, carriage return, newline, invalid runes, and the Unicode replacement character,
+or setting `Comma` and `Comment` equal to each other.
 
-    In the case of a syntax error in a CSV record that spans multiple input lines, `Reader`
-    now reports the line on which the record started in the [`ParseError`](/pkg/encoding/csv/#ParseError)'s new `StartLine` field.
+In the case of a syntax error in a CSV record that spans multiple input lines, `Reader`
+now reports the line on which the record started in the [`ParseError`](/pkg/encoding/csv/#ParseError)'s new `StartLine` field.
 
-[encoding/hex](/pkg/encoding/hex/)
+#### [encoding/hex](/pkg/encoding/hex/)
 
-:   The new functions
-    [`NewEncoder`](/pkg/encoding/hex/#NewEncoder)
-    and
-    [`NewDecoder`](/pkg/encoding/hex/#NewDecoder)
-    provide streaming conversions to and from hexadecimal,
-    analogous to equivalent functions already in
-    [encoding/base32](/pkg/encoding/base32/)
-    and
-    [encoding/base64](/pkg/encoding/base64/).
+The new functions
+[`NewEncoder`](/pkg/encoding/hex/#NewEncoder)
+and
+[`NewDecoder`](/pkg/encoding/hex/#NewDecoder)
+provide streaming conversions to and from hexadecimal,
+analogous to equivalent functions already in
+[encoding/base32](/pkg/encoding/base32/)
+and
+[encoding/base64](/pkg/encoding/base64/).
 
-    When the functions
-    [`Decode`](/pkg/encoding/hex/#Decode)
-    and
-    [`DecodeString`](/pkg/encoding/hex/#DecodeString)
-    encounter malformed input,
-    they now return the number of bytes already converted
-    along with the error.
-    Previously they always returned a count of 0 with any error.
+When the functions
+[`Decode`](/pkg/encoding/hex/#Decode)
+and
+[`DecodeString`](/pkg/encoding/hex/#DecodeString)
+encounter malformed input,
+they now return the number of bytes already converted
+along with the error.
+Previously they always returned a count of 0 with any error.
 
-[encoding/json](/pkg/encoding/json/)
+#### [encoding/json](/pkg/encoding/json/)
 
-:   The [`Decoder`](/pkg/encoding/json/#Decoder)
-    adds a new method
-    [`DisallowUnknownFields`](/pkg/encoding/json/#Decoder.DisallowUnknownFields)
-    that causes it to report inputs with unknown JSON fields as a decoding error.
-    (The default behavior has always been to discard unknown fields.)
+The [`Decoder`](/pkg/encoding/json/#Decoder)
+adds a new method
+[`DisallowUnknownFields`](/pkg/encoding/json/#Decoder.DisallowUnknownFields)
+that causes it to report inputs with unknown JSON fields as a decoding error.
+(The default behavior has always been to discard unknown fields.)
 
-    As a result of [fixing a reflect bug](#reflect),
-    [`Unmarshal`](/pkg/encoding/json/#Unmarshal)
-    can no longer decode into fields inside
-    embedded pointers to unexported struct types,
-    because it cannot initialize the unexported embedded pointer
-    to point at fresh storage.
-    `Unmarshal` now returns an error in this case.
+As a result of [fixing a reflect bug](#reflect),
+[`Unmarshal`](/pkg/encoding/json/#Unmarshal)
+can no longer decode into fields inside
+embedded pointers to unexported struct types,
+because it cannot initialize the unexported embedded pointer
+to point at fresh storage.
+`Unmarshal` now returns an error in this case.
 
-[encoding/pem](/pkg/encoding/pem/)
+#### [encoding/pem](/pkg/encoding/pem/)
 
-:   [`Encode`](/pkg/encoding/pem/#Encode)
-    and
-    [`EncodeToMemory`](/pkg/encoding/pem/#EncodeToMemory)
-    no longer generate partial output when presented with a
-    block that is impossible to encode as PEM data.
+[`Encode`](/pkg/encoding/pem/#Encode)
+and
+[`EncodeToMemory`](/pkg/encoding/pem/#EncodeToMemory)
+no longer generate partial output when presented with a
+block that is impossible to encode as PEM data.
 
-[encoding/xml](/pkg/encoding/xml/)
+#### [encoding/xml](/pkg/encoding/xml/)
 
-:   The new function
-    [`NewTokenDecoder`](/pkg/encoding/xml/#NewTokenDecoder)
-    is like
-    [`NewDecoder`](/pkg/encoding/xml/#NewDecoder)
-    but creates a decoder reading from a [`TokenReader`](/pkg/encoding/xml/#TokenReader)
-    instead of an XML-formatted byte stream.
-    This is meant to enable the construction of XML stream transformers in client libraries.
+The new function
+[`NewTokenDecoder`](/pkg/encoding/xml/#NewTokenDecoder)
+is like
+[`NewDecoder`](/pkg/encoding/xml/#NewDecoder)
+but creates a decoder reading from a [`TokenReader`](/pkg/encoding/xml/#TokenReader)
+instead of an XML-formatted byte stream.
+This is meant to enable the construction of XML stream transformers in client libraries.
 
-[flag](/pkg/flag/)
+#### [flag](/pkg/flag/)
 
-:   The default
-    [`Usage`](/pkg/flag/#Usage) function now prints
-    its first line of output to
-    `CommandLine.Output()`
-    instead of assuming `os.Stderr`,
-    so that the usage message is properly redirected for
-    clients using `CommandLine.SetOutput`.
+The default
+[`Usage`](/pkg/flag/#Usage) function now prints
+its first line of output to
+`CommandLine.Output()`
+instead of assuming `os.Stderr`,
+so that the usage message is properly redirected for
+clients using `CommandLine.SetOutput`.
 
-    [`PrintDefaults`](/pkg/flag/#PrintDefaults) now
-    adds appropriate indentation after newlines in flag usage strings,
-    so that multi-line usage strings display nicely.
+[`PrintDefaults`](/pkg/flag/#PrintDefaults) now
+adds appropriate indentation after newlines in flag usage strings,
+so that multi-line usage strings display nicely.
 
-    [`FlagSet`](/pkg/flag/#FlagSet) adds new methods
-    [`ErrorHandling`](/pkg/flag/#FlagSet.ErrorHandling),
-    [`Name`](/pkg/flag/#FlagSet.Name),
-    and
-    [`Output`](/pkg/flag/#FlagSet.Output),
-    to retrieve the settings passed to
-    [`NewFlagSet`](/pkg/flag/#NewFlagSet)
-    and
-    [`FlagSet.SetOutput`](/pkg/flag/#FlagSet.SetOutput).
+[`FlagSet`](/pkg/flag/#FlagSet) adds new methods
+[`ErrorHandling`](/pkg/flag/#FlagSet.ErrorHandling),
+[`Name`](/pkg/flag/#FlagSet.Name),
+and
+[`Output`](/pkg/flag/#FlagSet.Output),
+to retrieve the settings passed to
+[`NewFlagSet`](/pkg/flag/#NewFlagSet)
+and
+[`FlagSet.SetOutput`](/pkg/flag/#FlagSet.SetOutput).
 
-[go/doc](/pkg/go/doc/)
+#### [go/doc](/pkg/go/doc/)
 
-:   To support the [doc change](#doc) described above,
-    functions returning slices of `T`, `*T`, `**T`, and so on
-    are now reported in `T`'s [`Type`](/pkg/go/doc/#Type)'s `Funcs` list,
-    instead of in the [`Package`](/pkg/go/doc/#Package)'s `Funcs` list.
+To support the [doc change](#doc) described above,
+functions returning slices of `T`, `*T`, `**T`, and so on
+are now reported in `T`'s [`Type`](/pkg/go/doc/#Type)'s `Funcs` list,
+instead of in the [`Package`](/pkg/go/doc/#Package)'s `Funcs` list.
 
-[go/importer](/pkg/go/importer/)
+#### [go/importer](/pkg/go/importer/)
 
-:   The [`For`](/pkg/go/importer/#For) function now accepts a non-nil lookup argument.
+The [`For`](/pkg/go/importer/#For) function now accepts a non-nil lookup argument.
 
-[go/printer](/pkg/go/printer/)
+#### [go/printer](/pkg/go/printer/)
 
-:   The changes to the default formatting of Go source code
-    discussed in the [gofmt section](#gofmt) above
-    are implemented in the [go/printer](/pkg/go/printer/) package
-    and also affect the output of the higher-level [go/format](/pkg/go/format/) package.
+The changes to the default formatting of Go source code
+discussed in the [gofmt section](#gofmt) above
+are implemented in the [go/printer](/pkg/go/printer/) package
+and also affect the output of the higher-level [go/format](/pkg/go/format/) package.
 
-[hash](/pkg/hash/)
+#### [hash](/pkg/hash/)
 
-:   Implementations of the [`Hash`](/pkg/hash/#Hash) interface are now
-    encouraged to implement [`encoding.BinaryMarshaler`](/pkg/encoding/#BinaryMarshaler)
-    and [`encoding.BinaryUnmarshaler`](/pkg/encoding/#BinaryUnmarshaler)
-    to allow saving and recreating their internal state,
-    and all implementations in the standard library
-    ([hash/crc32](/pkg/hash/crc32/), [crypto/sha256](/pkg/crypto/sha256/), and so on)
-    now implement those interfaces.
+Implementations of the [`Hash`](/pkg/hash/#Hash) interface are now
+encouraged to implement [`encoding.BinaryMarshaler`](/pkg/encoding/#BinaryMarshaler)
+and [`encoding.BinaryUnmarshaler`](/pkg/encoding/#BinaryUnmarshaler)
+to allow saving and recreating their internal state,
+and all implementations in the standard library
+([hash/crc32](/pkg/hash/crc32/), [crypto/sha256](/pkg/crypto/sha256/), and so on)
+now implement those interfaces.
 
-[html/template](/pkg/html/template/)
+#### [html/template](/pkg/html/template/)
 
-:   The new [`Srcset`](/pkg/html/template#Srcset) content
-    type allows for proper handling of values within the
-    [`srcset`](https://w3c.github.io/html/semantics-embedded-content.html#element-attrdef-img-srcset)
-    attribute of `img` tags.
+The new [`Srcset`](/pkg/html/template#Srcset) content
+type allows for proper handling of values within the
+[`srcset`](https://w3c.github.io/html/semantics-embedded-content.html#element-attrdef-img-srcset)
+attribute of `img` tags.
 
-[math/big](/pkg/math/big/)
+#### [math/big](/pkg/math/big/)
 
-:   [`Int`](/pkg/math/big/#Int) now supports conversions to and from bases 2 through 62
-    in its [`SetString`](/pkg/math/big/#Int.SetString) and [`Text`](/pkg/math/big/#Text) methods.
-    (Previously it only allowed bases 2 through 36.)
-    The value of the constant `MaxBase` has been updated.
+[`Int`](/pkg/math/big/#Int) now supports conversions to and from bases 2 through 62
+in its [`SetString`](/pkg/math/big/#Int.SetString) and [`Text`](/pkg/math/big/#Text) methods.
+(Previously it only allowed bases 2 through 36.)
+The value of the constant `MaxBase` has been updated.
 
-    [`Int`](/pkg/math/big/#Int) adds a new
-    [`CmpAbs`](/pkg/math/big/#CmpAbs) method
-    that is like [`Cmp`](/pkg/math/big/#Cmp) but
-    compares only the absolute values (not the signs) of its arguments.
+[`Int`](/pkg/math/big/#Int) adds a new
+[`CmpAbs`](/pkg/math/big/#CmpAbs) method
+that is like [`Cmp`](/pkg/math/big/#Cmp) but
+compares only the absolute values (not the signs) of its arguments.
 
-    [`Float`](/pkg/math/big/#Float) adds a new
-    [`Sqrt`](/pkg/math/big/#Float.Sqrt) method to
-    compute square roots.
+[`Float`](/pkg/math/big/#Float) adds a new
+[`Sqrt`](/pkg/math/big/#Float.Sqrt) method to
+compute square roots.
 
-[math/cmplx](/pkg/math/cmplx/)
+#### [math/cmplx](/pkg/math/cmplx/)
 
-:   Branch cuts and other boundary cases in
-    [`Asin`](/pkg/math/cmplx/#Asin),
-    [`Asinh`](/pkg/math/cmplx/#Asinh),
-    [`Atan`](/pkg/math/cmplx/#Atan),
-    and
-    [`Sqrt`](/pkg/math/cmplx/#Sqrt)
-    have been corrected to match the definitions used in the C99 standard.
+Branch cuts and other boundary cases in
+[`Asin`](/pkg/math/cmplx/#Asin),
+[`Asinh`](/pkg/math/cmplx/#Asinh),
+[`Atan`](/pkg/math/cmplx/#Atan),
+and
+[`Sqrt`](/pkg/math/cmplx/#Sqrt)
+have been corrected to match the definitions used in the C99 standard.
 
-[math/rand](/pkg/math/rand/)
+#### [math/rand](/pkg/math/rand/)
 
-:   The new [`Shuffle`](/pkg/math/rand/#Shuffle) function and corresponding
-    [`Rand.Shuffle`](/pkg/math/rand/#Rand.Shuffle) method
-    shuffle an input sequence.
+The new [`Shuffle`](/pkg/math/rand/#Shuffle) function and corresponding
+[`Rand.Shuffle`](/pkg/math/rand/#Rand.Shuffle) method
+shuffle an input sequence.
 
-[math](/pkg/math/)
+#### [math](/pkg/math/)
 
-:   The new functions
-    [`Round`](/pkg/math/#Round)
-    and
-    [`RoundToEven`](/pkg/math/#RoundToEven)
-    round their arguments to the nearest floating-point integer;
-    `Round` rounds a half-integer to its larger integer neighbor (away from zero)
-    while `RoundToEven` rounds a half-integer to its even integer neighbor.
+The new functions
+[`Round`](/pkg/math/#Round)
+and
+[`RoundToEven`](/pkg/math/#RoundToEven)
+round their arguments to the nearest floating-point integer;
+`Round` rounds a half-integer to its larger integer neighbor (away from zero)
+while `RoundToEven` rounds a half-integer to its even integer neighbor.
 
-    The new functions
-    [`Erfinv`](/pkg/math/#Erfinv)
-    and
-    [`Erfcinv`](/pkg/math/#Erfcinv)
-    compute the inverse error function and the
-    inverse complementary error function.
+The new functions
+[`Erfinv`](/pkg/math/#Erfinv)
+and
+[`Erfcinv`](/pkg/math/#Erfcinv)
+compute the inverse error function and the
+inverse complementary error function.
 
-[mime/multipart](/pkg/mime/multipart/)
+#### [mime/multipart](/pkg/mime/multipart/)
 
-:   [`Reader`](/pkg/mime/multipart/#Reader)
-    now accepts parts with empty filename attributes.
+[`Reader`](/pkg/mime/multipart/#Reader)
+now accepts parts with empty filename attributes.
 
-[mime](/pkg/mime/)
+#### [mime](/pkg/mime/)
 
-:   [`ParseMediaType`](/pkg/mime/#ParseMediaType) now discards
-    invalid attribute values; previously it returned those values as empty strings.
+[`ParseMediaType`](/pkg/mime/#ParseMediaType) now discards
+invalid attribute values; previously it returned those values as empty strings.
 
-[net](/pkg/net/)
+#### [net](/pkg/net/)
 
-:   The [`Conn`](/pkg/net/#Conn) and
-    [`Listener`](/pkg/net/#Conn) implementations
-    in this package now guarantee that when `Close` returns,
-    the underlying file descriptor has been closed.
-    (In earlier releases, if the `Close` stopped pending I/O
-    in other goroutines, the closing of the file descriptor could happen in one of those
-    goroutines shortly after `Close` returned.)
+The [`Conn`](/pkg/net/#Conn) and
+[`Listener`](/pkg/net/#Conn) implementations
+in this package now guarantee that when `Close` returns,
+the underlying file descriptor has been closed.
+(In earlier releases, if the `Close` stopped pending I/O
+in other goroutines, the closing of the file descriptor could happen in one of those
+goroutines shortly after `Close` returned.)
 
-    [`TCPListener`](/pkg/net/#TCPListener) and
-    [`UnixListener`](/pkg/net/#UnixListener)
-    now implement
-    [`syscall.Conn`](/pkg/syscall/#Conn),
-    to allow setting options on the underlying file descriptor
-    using [`syscall.RawConn.Control`](/pkg/syscall/#RawConn).
+[`TCPListener`](/pkg/net/#TCPListener) and
+[`UnixListener`](/pkg/net/#UnixListener)
+now implement
+[`syscall.Conn`](/pkg/syscall/#Conn),
+to allow setting options on the underlying file descriptor
+using [`syscall.RawConn.Control`](/pkg/syscall/#RawConn).
 
-    The `Conn` implementations returned by [`Pipe`](/pkg/net/#Pipe)
-    now support setting read and write deadlines.
+The `Conn` implementations returned by [`Pipe`](/pkg/net/#Pipe)
+now support setting read and write deadlines.
 
-    The [`IPConn.ReadMsgIP`](/pkg/net/#IPConn.ReadMsgIP),
-    [`IPConn.WriteMsgIP`](/pkg/net/#IPConn.WriteMsgIP),
-    [`UDPConn.ReadMsgUDP`](/pkg/net/#UDPConn.ReadMsgUDP),
-    and
-    [`UDPConn.WriteMsgUDP`](/pkg/net/#UDPConn.WriteMsgUDP),
-    methods are now implemented on Windows.
+The [`IPConn.ReadMsgIP`](/pkg/net/#IPConn.ReadMsgIP),
+[`IPConn.WriteMsgIP`](/pkg/net/#IPConn.WriteMsgIP),
+[`UDPConn.ReadMsgUDP`](/pkg/net/#UDPConn.ReadMsgUDP),
+and
+[`UDPConn.WriteMsgUDP`](/pkg/net/#UDPConn.WriteMsgUDP),
+methods are now implemented on Windows.
 
-[net/http](/pkg/net/http/)
+#### [net/http](/pkg/net/http/)
 
-:   On the client side, an HTTP proxy (most commonly configured by
-    [`ProxyFromEnvironment`](/pkg/net/http/#ProxyFromEnvironment))
-    can now be specified as an `https://` 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 `http://` or `socks5://`.)
+On the client side, an HTTP proxy (most commonly configured by
+[`ProxyFromEnvironment`](/pkg/net/http/#ProxyFromEnvironment))
+can now be specified as an `https://` 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 `http://` or `socks5://`.)
 
-    On the server side, [`FileServer`](/pkg/net/http/#FileServer) and its single-file equivalent [`ServeFile`](/pkg/net/http/#ServeFile)
-    now apply `If-Range` checks to `HEAD` requests.
-    `FileServer` also now reports directory read failures to the [`Server`](/pkg/net/http/#Server)'s `ErrorLog`.
-    The content-serving handlers also now omit the `Content-Type` header when serving zero-length content.
+On the server side, [`FileServer`](/pkg/net/http/#FileServer) and its single-file equivalent [`ServeFile`](/pkg/net/http/#ServeFile)
+now apply `If-Range` checks to `HEAD` requests.
+`FileServer` also now reports directory read failures to the [`Server`](/pkg/net/http/#Server)'s `ErrorLog`.
+The content-serving handlers also now omit the `Content-Type` header when serving zero-length content.
 
-    [`ResponseWriter`](/pkg/net/http/#ResponseWriter)'s `WriteHeader` method now panics
-    if passed an invalid (non-3-digit) status code.
+[`ResponseWriter`](/pkg/net/http/#ResponseWriter)'s `WriteHeader` method now panics
+if passed an invalid (non-3-digit) status code.
 
-    <!-- CL 46631 -->
-    The `Server` will no longer add an implicit Content-Type when a `Handler` does not write any output.
+<!-- CL 46631 -->
+The `Server` will no longer add an implicit Content-Type when a `Handler` does not write any output.
 
-    [`Redirect`](/pkg/net/http/#Redirect) now sets the `Content-Type` header before writing its HTTP response.
+[`Redirect`](/pkg/net/http/#Redirect) now sets the `Content-Type` header before writing its HTTP response.
 
-[net/mail](/pkg/net/mail/)
+#### [net/mail](/pkg/net/mail/)
 
-:   [`ParseAddress`](/pkg/net/mail/#ParseAddress) and
-    [`ParseAddressList`](/pkg/net/mail/#ParseAddressList)
-    now support a variety of obsolete address formats.
+[`ParseAddress`](/pkg/net/mail/#ParseAddress) and
+[`ParseAddressList`](/pkg/net/mail/#ParseAddressList)
+now support a variety of obsolete address formats.
 
-[net/smtp](/pkg/net/smtp/)
+#### [net/smtp](/pkg/net/smtp/)
 
-:   The [`Client`](/pkg/net/smtp/#Client) adds a new
-    [`Noop`](/pkg/net/smtp/#Client.Noop) method,
-    to test whether the server is still responding.
-    It also now defends against possible SMTP injection in the inputs
-    to the [`Hello`](/pkg/net/smtp/#Client.Hello)
-    and [`Verify`](/pkg/net/smtp/#Client.Verify) methods.
+The [`Client`](/pkg/net/smtp/#Client) adds a new
+[`Noop`](/pkg/net/smtp/#Client.Noop) method,
+to test whether the server is still responding.
+It also now defends against possible SMTP injection in the inputs
+to the [`Hello`](/pkg/net/smtp/#Client.Hello)
+and [`Verify`](/pkg/net/smtp/#Client.Verify) methods.
 
-[net/textproto](/pkg/net/textproto/)
+#### [net/textproto](/pkg/net/textproto/)
 
-:   [`ReadMIMEHeader`](/pkg/net/textproto/#ReadMIMEHeader)
-    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.
+[`ReadMIMEHeader`](/pkg/net/textproto/#ReadMIMEHeader)
+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.
 
-[net/url](/pkg/net/url/)
+#### [net/url](/pkg/net/url/)
 
-:   [`ResolveReference`](/pkg/net/url/#ResolveReference)
-    now preserves multiple leading slashes in the target URL.
-    Previously it rewrote multiple leading slashes to a single slash,
-    which resulted in the [`http.Client`](/pkg/net/http/#Client)
-    following certain redirects incorrectly.
+[`ResolveReference`](/pkg/net/url/#ResolveReference)
+now preserves multiple leading slashes in the target URL.
+Previously it rewrote multiple leading slashes to a single slash,
+which resulted in the [`http.Client`](/pkg/net/http/#Client)
+following certain redirects incorrectly.
 
-    For example, this code's output has changed:
+For example, this code's output has changed:
 
-    	base, _ := url.Parse("http://host//path//to/page1")
-    	target, _ := url.Parse("page2")
-    	fmt.Println(base.ResolveReference(target))
+	base, _ := url.Parse("http://host//path//to/page1")
+	target, _ := url.Parse("page2")
+	fmt.Println(base.ResolveReference(target))
 
-    Note the doubled slashes around `path`.
-    In Go 1.9 and earlier, the resolved URL was `http://host/path//to/page2`:
-    the doubled slash before `path` was incorrectly rewritten
-    to a single slash, while the doubled slash after `path` was
-    correctly preserved.
-    Go 1.10 preserves both doubled slashes, resolving to `http://host//path//to/page2`
-    as required by [RFC 3986](https://tools.ietf.org/html/rfc3986#section-5.2).
+Note the doubled slashes around `path`.
+In Go 1.9 and earlier, the resolved URL was `http://host/path//to/page2`:
+the doubled slash before `path` was incorrectly rewritten
+to a single slash, while the doubled slash after `path` was
+correctly preserved.
+Go 1.10 preserves both doubled slashes, resolving to `http://host//path//to/page2`
+as required by [RFC 3986](https://tools.ietf.org/html/rfc3986#section-5.2).
 
-    This change may break existing buggy programs that unintentionally
-    construct a base URL with a leading doubled slash in the path and inadvertently
-    depend on `ResolveReference` to correct that mistake.
-    For example, this can happen if code adds a host prefix
-    like `http://host/` to a path like `/my/api`,
-    resulting in a URL with a doubled slash: `http://host//my/api`.
+This change may break existing buggy programs that unintentionally
+construct a base URL with a leading doubled slash in the path and inadvertently
+depend on `ResolveReference` to correct that mistake.
+For example, this can happen if code adds a host prefix
+like `http://host/` to a path like `/my/api`,
+resulting in a URL with a doubled slash: `http://host//my/api`.
 
-    [`UserInfo`](/pkg/net/url/#UserInfo)'s methods
-    now treat a nil receiver as equivalent to a pointer to a zero `UserInfo`.
-    Previously, they panicked.
+[`UserInfo`](/pkg/net/url/#UserInfo)'s methods
+now treat a nil receiver as equivalent to a pointer to a zero `UserInfo`.
+Previously, they panicked.
 
-[os](/pkg/os/)
+#### [os](/pkg/os/)
 
-:   [`File`](/pkg/os/#File) adds new methods
-    [`SetDeadline`](/pkg/os/#File.SetDeadline),
-    [`SetReadDeadline`](/pkg/os/#File.SetReadDeadline),
-    and
-    [`SetWriteDeadline`](/pkg/os/#File.SetWriteDeadline)
-    that allow setting I/O deadlines when the
-    underlying file descriptor supports non-blocking I/O operations.
-    The definition of these methods matches those in [`net.Conn`](/pkg/net/#Conn).
-    If an I/O method fails due to missing a deadline, it will return a
-    timeout error; the
-    new [`IsTimeout`](/pkg/os/#IsTimeout) function
-    reports whether an error represents a timeout.
+[`File`](/pkg/os/#File) adds new methods
+[`SetDeadline`](/pkg/os/#File.SetDeadline),
+[`SetReadDeadline`](/pkg/os/#File.SetReadDeadline),
+and
+[`SetWriteDeadline`](/pkg/os/#File.SetWriteDeadline)
+that allow setting I/O deadlines when the
+underlying file descriptor supports non-blocking I/O operations.
+The definition of these methods matches those in [`net.Conn`](/pkg/net/#Conn).
+If an I/O method fails due to missing a deadline, it will return a
+timeout error; the
+new [`IsTimeout`](/pkg/os/#IsTimeout) function
+reports whether an error represents a timeout.
 
-    Also matching `net.Conn`,
-    `File`'s
-    [`Close`](/pkg/os/#File.Close) method
-    now guarantee that when `Close` returns,
-    the underlying file descriptor has been closed.
-    (In earlier releases,
-    if the `Close` stopped pending I/O
-    in other goroutines, the closing of the file descriptor could happen in one of those
-    goroutines shortly after `Close` returned.)
+Also matching `net.Conn`,
+`File`'s
+[`Close`](/pkg/os/#File.Close) method
+now guarantee that when `Close` returns,
+the underlying file descriptor has been closed.
+(In earlier releases,
+if the `Close` stopped pending I/O
+in other goroutines, the closing of the file descriptor could happen in one of those
+goroutines shortly after `Close` returned.)
 
-    On BSD, macOS, and Solaris systems,
-    [`Chtimes`](/pkg/os/#Chtimes)
-    now supports setting file times with nanosecond precision
-    (assuming the underlying file system can represent them).
+On BSD, macOS, and Solaris systems,
+[`Chtimes`](/pkg/os/#Chtimes)
+now supports setting file times with nanosecond precision
+(assuming the underlying file system can represent them).
 
-[reflect](/pkg/reflect/)
+#### [reflect](/pkg/reflect/)
 
-:   The [`Copy`](/pkg/reflect/#Copy) function now allows copying
-    from a string into a byte array or byte slice, to match the
-    [built-in copy function](/pkg/builtin/#copy).
+The [`Copy`](/pkg/reflect/#Copy) function now allows copying
+from a string into a byte array or byte slice, to match the
+[built-in copy function](/pkg/builtin/#copy).
 
-    In structs, embedded pointers to unexported struct types were
-    previously incorrectly reported with an empty `PkgPath`
-    in the corresponding [StructField](/pkg/reflect/#StructField),
-    with the result that for those fields,
-    and [`Value.CanSet`](/pkg/reflect/#Value.CanSet)
-    incorrectly returned true and
-    [`Value.Set`](/pkg/reflect/#Value.Set)
-    incorrectly succeeded.
-    The underlying metadata has been corrected;
-    for those fields,
-    `CanSet` now correctly returns false
-    and `Set` now correctly panics.
-    This may affect reflection-based unmarshalers
-    that could previously unmarshal into such fields
-    but no longer can.
-    For example, see the [`encoding/json` notes](#encoding/json).
+In structs, embedded pointers to unexported struct types were
+previously incorrectly reported with an empty `PkgPath`
+in the corresponding [StructField](/pkg/reflect/#StructField),
+with the result that for those fields,
+and [`Value.CanSet`](/pkg/reflect/#Value.CanSet)
+incorrectly returned true and
+[`Value.Set`](/pkg/reflect/#Value.Set)
+incorrectly succeeded.
+The underlying metadata has been corrected;
+for those fields,
+`CanSet` now correctly returns false
+and `Set` now correctly panics.
+This may affect reflection-based unmarshalers
+that could previously unmarshal into such fields
+but no longer can.
+For example, see the [`encoding/json` notes](#encoding/json).
 
-[runtime/pprof](/pkg/runtime/pprof/)
+#### [runtime/pprof](/pkg/runtime/pprof/)
 
-:   As [noted above](#pprof), the blocking and mutex profiles
-    now include symbol information so that they can be viewed without needing
-    the binary that generated them.
+As [noted above](#pprof), the blocking and mutex profiles
+now include symbol information so that they can be viewed without needing
+the binary that generated them.
 
-[strconv](/pkg/strconv/)
+#### [strconv](/pkg/strconv/)
 
-:   [`ParseUint`](/pkg/strconv/#ParseUint) now returns
-    the maximum magnitude integer of the appropriate size
-    with any `ErrRange` error, as it was already documented to do.
-    Previously it returned 0 with `ErrRange` errors.
+[`ParseUint`](/pkg/strconv/#ParseUint) now returns
+the maximum magnitude integer of the appropriate size
+with any `ErrRange` error, as it was already documented to do.
+Previously it returned 0 with `ErrRange` errors.
 
-[strings](/pkg/strings/)
+#### [strings](/pkg/strings/)
 
-:   A new type
-    [`Builder`](/pkg/strings/#Builder) is a replacement for
-    [`bytes.Buffer`](/pkg/bytes/#Buffer) for the use case of
-    accumulating text into a `string` result.
-    The `Builder`'s API is a restricted subset of `bytes.Buffer`'s
-    that allows it to safely avoid making a duplicate copy of the data
-    during the [`String`](/pkg/strings/#Builder.String) method.
+A new type
+[`Builder`](/pkg/strings/#Builder) is a replacement for
+[`bytes.Buffer`](/pkg/bytes/#Buffer) for the use case of
+accumulating text into a `string` result.
+The `Builder`'s API is a restricted subset of `bytes.Buffer`'s
+that allows it to safely avoid making a duplicate copy of the data
+during the [`String`](/pkg/strings/#Builder.String) method.
 
-[syscall](/pkg/syscall/)
+#### [syscall](/pkg/syscall/)
 
-:   On Windows,
-    the new [`SysProcAttr`](/pkg/syscall/#SysProcAttr) field `Token`,
-    of type [`Token`](/pkg/syscall/#Token) allows the creation of a process that
-    runs as another user during [`StartProcess`](/pkg/syscall/#StartProcess)
-    (and therefore also during [`os.StartProcess`](/pkg/os/#StartProcess) and
-    [`exec.Cmd.Start`](/pkg/os/exec/#Cmd.Start)).
-    The new function [`CreateProcessAsUser`](/pkg/syscall/#CreateProcessAsUser)
-    gives access to the underlying system call.
+On Windows,
+the new [`SysProcAttr`](/pkg/syscall/#SysProcAttr) field `Token`,
+of type [`Token`](/pkg/syscall/#Token) allows the creation of a process that
+runs as another user during [`StartProcess`](/pkg/syscall/#StartProcess)
+(and therefore also during [`os.StartProcess`](/pkg/os/#StartProcess) and
+[`exec.Cmd.Start`](/pkg/os/exec/#Cmd.Start)).
+The new function [`CreateProcessAsUser`](/pkg/syscall/#CreateProcessAsUser)
+gives access to the underlying system call.
 
-    On BSD, macOS, and Solaris systems, [`UtimesNano`](/pkg/syscall/#UtimesNano)
-    is now implemented.
+On BSD, macOS, and Solaris systems, [`UtimesNano`](/pkg/syscall/#UtimesNano)
+is now implemented.
 
-[time](/pkg/time/)
+#### [time](/pkg/time/)
 
-:   [`LoadLocation`](/pkg/time/#LoadLocation) now uses the directory
-    or uncompressed zip file named by the `$ZONEINFO`
-    environment variable before looking in the default system-specific list of
-    known installation locations or in `$GOROOT/lib/time/zoneinfo.zip`.
+[`LoadLocation`](/pkg/time/#LoadLocation) now uses the directory
+or uncompressed zip file named by the `$ZONEINFO`
+environment variable before looking in the default system-specific list of
+known installation locations or in `$GOROOT/lib/time/zoneinfo.zip`.
 
-    The new function [`LoadLocationFromTZData`](/pkg/time/#LoadLocationFromTZData)
-    allows conversion of IANA time zone file data to a [`Location`](/pkg/time/#Location).
+The new function [`LoadLocationFromTZData`](/pkg/time/#LoadLocationFromTZData)
+allows conversion of IANA time zone file data to a [`Location`](/pkg/time/#Location).
 
-[unicode](/pkg/unicode/)
+#### [unicode](/pkg/unicode/)
 
-:   The [`unicode`](/pkg/unicode/) package and associated
-    support throughout the system has been upgraded from Unicode 9.0 to
-    [Unicode 10.0](https://www.unicode.org/versions/Unicode10.0.0/),
-    which adds 8,518 new characters, including four new scripts, one new property,
-    a Bitcoin currency symbol, and 56 new emoji.
+The [`unicode`](/pkg/unicode/) package and associated
+support throughout the system has been upgraded from Unicode 9.0 to
+[Unicode 10.0](https://www.unicode.org/versions/Unicode10.0.0/),
+which adds 8,518 new characters, including four new scripts, one new property,
+a Bitcoin currency symbol, and 56 new emoji.
diff --git a/_content/doc/go1.11.md b/_content/doc/go1.11.md
index bddfa65..0995413 100644
--- a/_content/doc/go1.11.md
+++ b/_content/doc/go1.11.md
@@ -408,402 +408,402 @@
 <!-- CL 110395: https://golang.org/cl/110395: cmd/go, cmd/compile: use Windows response files to avoid arg length limits -->
 <!-- CL 112436: https://golang.org/cl/112436: cmd/pprof: add readline support similar to upstream -->
 
-[crypto](/pkg/crypto/)
+#### [crypto](/pkg/crypto/)
 
-:   <!-- CL 64451 -->
-    Certain crypto operations, including
-    [`ecdsa.Sign`](/pkg/crypto/ecdsa/#Sign),
-    [`rsa.EncryptPKCS1v15`](/pkg/crypto/rsa/#EncryptPKCS1v15) and
-    [`rsa.GenerateKey`](/pkg/crypto/rsa/#GenerateKey),
-    now randomly read an extra byte of randomness to ensure tests don't rely on internal behavior.
+<!-- CL 64451 -->
+Certain crypto operations, including
+[`ecdsa.Sign`](/pkg/crypto/ecdsa/#Sign),
+[`rsa.EncryptPKCS1v15`](/pkg/crypto/rsa/#EncryptPKCS1v15) and
+[`rsa.GenerateKey`](/pkg/crypto/rsa/#GenerateKey),
+now randomly read an extra byte of randomness to ensure tests don't rely on internal behavior.
 
 <!-- crypto -->
 
-[crypto/cipher](/pkg/crypto/cipher/)
+#### [crypto/cipher](/pkg/crypto/cipher/)
 
-:   <!-- CL 48510, CL 116435 -->
-    The new function [`NewGCMWithTagSize`](/pkg/crypto/cipher/#NewGCMWithTagSize)
-    implements Galois Counter Mode with non-standard tag lengths for compatibility with existing cryptosystems.
+<!-- CL 48510, CL 116435 -->
+The new function [`NewGCMWithTagSize`](/pkg/crypto/cipher/#NewGCMWithTagSize)
+implements Galois Counter Mode with non-standard tag lengths for compatibility with existing cryptosystems.
 
 <!-- crypto/cipher -->
 
-[crypto/rsa](/pkg/crypto/rsa/)
+#### [crypto/rsa](/pkg/crypto/rsa/)
 
-:   <!-- CL 103876 -->
-    [`PublicKey`](/pkg/crypto/rsa/#PublicKey) now implements a
-    [`Size`](/pkg/crypto/rsa/#PublicKey.Size) method that
-    returns the modulus size in bytes.
+<!-- CL 103876 -->
+[`PublicKey`](/pkg/crypto/rsa/#PublicKey) now implements a
+[`Size`](/pkg/crypto/rsa/#PublicKey.Size) method that
+returns the modulus size in bytes.
 
 <!-- crypto/rsa -->
 
-[crypto/tls](/pkg/crypto/tls/)
+#### [crypto/tls](/pkg/crypto/tls/)
 
-:   <!-- CL 85115 -->
-    [`ConnectionState`](/pkg/crypto/tls/#ConnectionState)'s new
-    [`ExportKeyingMaterial`](/pkg/crypto/tls/#ConnectionState.ExportKeyingMaterial)
-    method allows exporting keying material bound to the
-    connection according to RFC 5705.
+<!-- CL 85115 -->
+[`ConnectionState`](/pkg/crypto/tls/#ConnectionState)'s new
+[`ExportKeyingMaterial`](/pkg/crypto/tls/#ConnectionState.ExportKeyingMaterial)
+method allows exporting keying material bound to the
+connection according to RFC 5705.
 
 <!-- crypto/tls -->
 
-[crypto/x509](/pkg/crypto/x509/)
+#### [crypto/x509](/pkg/crypto/x509/)
 
-:   <!-- CL 123355, CL 123695 -->
-    The deprecated, legacy behavior of treating the `CommonName` field as
-    a hostname when no Subject Alternative Names are present is now disabled when the CN is not a
-    valid hostname.
-    The `CommonName` can be completely ignored by adding the experimental value
-    `x509ignoreCN=1` to the `GODEBUG` environment variable.
-    When the CN is ignored, certificates without SANs validate under chains with name constraints
-    instead of returning `NameConstraintsWithoutSANs`.
+<!-- CL 123355, CL 123695 -->
+The deprecated, legacy behavior of treating the `CommonName` field as
+a hostname when no Subject Alternative Names are present is now disabled when the CN is not a
+valid hostname.
+The `CommonName` can be completely ignored by adding the experimental value
+`x509ignoreCN=1` to the `GODEBUG` environment variable.
+When the CN is ignored, certificates without SANs validate under chains with name constraints
+instead of returning `NameConstraintsWithoutSANs`.
 
-    <!-- CL 113475 -->
-    Extended key usage restrictions are again checked only if they appear in the `KeyUsages`
-    field of [`VerifyOptions`](/pkg/crypto/x509/#VerifyOptions), instead of always being checked.
-    This matches the behavior of Go 1.9 and earlier.
+<!-- CL 113475 -->
+Extended key usage restrictions are again checked only if they appear in the `KeyUsages`
+field of [`VerifyOptions`](/pkg/crypto/x509/#VerifyOptions), instead of always being checked.
+This matches the behavior of Go 1.9 and earlier.
 
-    <!-- CL 102699 -->
-    The value returned by [`SystemCertPool`](/pkg/crypto/x509/#SystemCertPool)
-    is now cached and might not reflect system changes between invocations.
+<!-- CL 102699 -->
+The value returned by [`SystemCertPool`](/pkg/crypto/x509/#SystemCertPool)
+is now cached and might not reflect system changes between invocations.
 
 <!-- crypto/x509 -->
 
-[debug/elf](/pkg/debug/elf/)
+#### [debug/elf](/pkg/debug/elf/)
 
-:   <!-- CL 112115 -->
-    More [`ELFOSABI`](/pkg/debug/elf/#ELFOSABI_NONE)
-    and [`EM`](/pkg/debug/elf/#EM_NONE)
-    constants have been added.
+<!-- CL 112115 -->
+More [`ELFOSABI`](/pkg/debug/elf/#ELFOSABI_NONE)
+and [`EM`](/pkg/debug/elf/#EM_NONE)
+constants have been added.
 
 <!-- debug/elf -->
 
-[encoding/asn1](/pkg/encoding/asn1/)
+#### [encoding/asn1](/pkg/encoding/asn1/)
 
-:   <!-- CL 110561 -->
-    `Marshal` and [`Unmarshal`](/pkg/encoding/asn1/#Unmarshal)
-    now support "private" class annotations for fields.
+<!-- CL 110561 -->
+`Marshal` and [`Unmarshal`](/pkg/encoding/asn1/#Unmarshal)
+now support "private" class annotations for fields.
 
 <!-- encoding/asn1 -->
 
-[encoding/base32](/pkg/encoding/base32/)
+#### [encoding/base32](/pkg/encoding/base32/)
 
-:   <!-- CL 112516 -->
-    The decoder now consistently
-    returns `io.ErrUnexpectedEOF` for an incomplete
-    chunk. Previously it would return `io.EOF` in some
-    cases.
+<!-- CL 112516 -->
+The decoder now consistently
+returns `io.ErrUnexpectedEOF` for an incomplete
+chunk. Previously it would return `io.EOF` in some
+cases.
 
 <!-- encoding/base32 -->
 
-[encoding/csv](/pkg/encoding/csv/)
+#### [encoding/csv](/pkg/encoding/csv/)
 
-:   <!-- CL 99696 -->
-    The `Reader` now rejects attempts to set
-    the [`Comma`](/pkg/encoding/csv/#Reader.Comma)
-    field to a double-quote character, as double-quote characters
-    already have a special meaning in CSV.
+<!-- CL 99696 -->
+The `Reader` now rejects attempts to set
+the [`Comma`](/pkg/encoding/csv/#Reader.Comma)
+field to a double-quote character, as double-quote characters
+already have a special meaning in CSV.
 
 <!-- encoding/csv -->
 
 <!-- CL 100235 was reverted -->
 
-[html/template](/pkg/html/template/)
+#### [html/template](/pkg/html/template/)
 
-:   <!-- CL 121815 -->
-    The package has changed its behavior when a typed interface
-    value is passed to an implicit escaper function. Previously such
-    a value was written out as (an escaped form)
-    of `<nil>`. Now such values are ignored, just
-    as an untyped `nil` value is (and always has been)
-    ignored.
+<!-- CL 121815 -->
+The package has changed its behavior when a typed interface
+value is passed to an implicit escaper function. Previously such
+a value was written out as (an escaped form)
+of `<nil>`. Now such values are ignored, just
+as an untyped `nil` value is (and always has been)
+ignored.
 
 <!-- html/template -->
 
-[image/gif](/pkg/image/gif/)
+#### [image/gif](/pkg/image/gif/)
 
-:   <!-- CL 93076 -->
-    Non-looping animated GIFs are now supported. They are denoted by having a
-    [`LoopCount`](/pkg/image/gif/#GIF.LoopCount) of -1.
+<!-- CL 93076 -->
+Non-looping animated GIFs are now supported. They are denoted by having a
+[`LoopCount`](/pkg/image/gif/#GIF.LoopCount) of -1.
 
 <!-- image/gif -->
 
-[io/ioutil](/pkg/io/ioutil/)
+#### [io/ioutil](/pkg/io/ioutil/)
 
-:   <!-- CL 105675 -->
-    The [`TempFile`](/pkg/io/ioutil/#TempFile)
-    function now supports specifying where the random characters in
-    the filename are placed. If the `prefix` argument
-    includes a "`*`", the random string replaces the
-    "`*`". For example, a `prefix` argument of "`myname.*.bat`" will
-    result in a random filename such as
-    "`myname.123456.bat`". If no "`*`" is
-    included the old behavior is retained, and the random digits are
-    appended to the end.
+<!-- CL 105675 -->
+The [`TempFile`](/pkg/io/ioutil/#TempFile)
+function now supports specifying where the random characters in
+the filename are placed. If the `prefix` argument
+includes a "`*`", the random string replaces the
+"`*`". For example, a `prefix` argument of "`myname.*.bat`" will
+result in a random filename such as
+"`myname.123456.bat`". If no "`*`" is
+included the old behavior is retained, and the random digits are
+appended to the end.
 
 <!-- io/ioutil -->
 
-[math/big](/pkg/math/big/)
+#### [math/big](/pkg/math/big/)
 
-:   <!-- CL 108996 -->
-    [`ModInverse`](/pkg/math/big/#Int.ModInverse) now returns nil when g and n are not relatively prime. The result was previously undefined.
+<!-- CL 108996 -->
+[`ModInverse`](/pkg/math/big/#Int.ModInverse) now returns nil when g and n are not relatively prime. The result was previously undefined.
 
 <!-- math/big -->
 
-[mime/multipart](/pkg/mime/multipart/)
+#### [mime/multipart](/pkg/mime/multipart/)
 
-:   <!-- CL 121055 -->
-    The handling of form-data with missing/empty file names has been
-    restored to the behavior in Go 1.9: in the
-    [`Form`](/pkg/mime/multipart/#Form) for
-    the form-data part the value is available in
-    the `Value` field rather than the `File`
-    field. In Go releases 1.10 through 1.10.3 a form-data part with
-    a missing/empty file name and a non-empty "Content-Type" field
-    was stored in the `File` field. This change was a
-    mistake in 1.10 and has been reverted to the 1.9 behavior.
+<!-- CL 121055 -->
+The handling of form-data with missing/empty file names has been
+restored to the behavior in Go 1.9: in the
+[`Form`](/pkg/mime/multipart/#Form) for
+the form-data part the value is available in
+the `Value` field rather than the `File`
+field. In Go releases 1.10 through 1.10.3 a form-data part with
+a missing/empty file name and a non-empty "Content-Type" field
+was stored in the `File` field. This change was a
+mistake in 1.10 and has been reverted to the 1.9 behavior.
 
 <!-- mime/multipart -->
 
-[mime/quotedprintable](/pkg/mime/quotedprintable/)
+#### [mime/quotedprintable](/pkg/mime/quotedprintable/)
 
-:   <!-- CL 121095 -->
-    To support invalid input found in the wild, the package now
-    permits non-ASCII bytes but does not validate their encoding.
+<!-- CL 121095 -->
+To support invalid input found in the wild, the package now
+permits non-ASCII bytes but does not validate their encoding.
 
 <!-- mime/quotedprintable -->
 
-[net](/pkg/net/)
+#### [net](/pkg/net/)
 
-:   <!-- CL 72810 -->
-    The new [`ListenConfig`](/pkg/net/#ListenConfig) type and the new
-    [`Dialer.Control`](/pkg/net/#Dialer.Control) field permit
-    setting socket options before accepting and creating connections, respectively.
+<!-- CL 72810 -->
+The new [`ListenConfig`](/pkg/net/#ListenConfig) type and the new
+[`Dialer.Control`](/pkg/net/#Dialer.Control) field permit
+setting socket options before accepting and creating connections, respectively.
 
-    <!-- CL 76391 -->
-    The [`syscall.RawConn`](/pkg/syscall/#RawConn) `Read`
-    and `Write` methods now work correctly on Windows.
+<!-- CL 76391 -->
+The [`syscall.RawConn`](/pkg/syscall/#RawConn) `Read`
+and `Write` methods now work correctly on Windows.
 
-    <!-- CL 107715 -->
-    The `net` package now automatically uses the
-    [`splice` system call](https://man7.org/linux/man-pages/man2/splice.2.html)
-    on Linux when copying data between TCP connections in
-    [`TCPConn.ReadFrom`](/pkg/net/#TCPConn.ReadFrom), as called by
-    [`io.Copy`](/pkg/io/#Copy). The result is faster, more efficient TCP proxying.
+<!-- CL 107715 -->
+The `net` package now automatically uses the
+[`splice` system call](https://man7.org/linux/man-pages/man2/splice.2.html)
+on Linux when copying data between TCP connections in
+[`TCPConn.ReadFrom`](/pkg/net/#TCPConn.ReadFrom), as called by
+[`io.Copy`](/pkg/io/#Copy). The result is faster, more efficient TCP proxying.
 
-    <!-- CL 108297 -->
-    The [`TCPConn.File`](/pkg/net/#TCPConn.File),
-    [`UDPConn.File`](/pkg/net/#UDPConn.File),
-    [`UnixConn.File`](/pkg/net/#UnixCOnn.File),
-    and [`IPConn.File`](/pkg/net/#IPConn.File)
-    methods no longer put the returned `*os.File` into
-    blocking mode.
+<!-- CL 108297 -->
+The [`TCPConn.File`](/pkg/net/#TCPConn.File),
+[`UDPConn.File`](/pkg/net/#UDPConn.File),
+[`UnixConn.File`](/pkg/net/#UnixCOnn.File),
+and [`IPConn.File`](/pkg/net/#IPConn.File)
+methods no longer put the returned `*os.File` into
+blocking mode.
 
 <!-- net -->
 
-[net/http](/pkg/net/http/)
+#### [net/http](/pkg/net/http/)
 
-:   <!-- CL 71272 -->
-    The [`Transport`](/pkg/net/http/#Transport) type has a
-    new [`MaxConnsPerHost`](/pkg/net/http/#Transport.MaxConnsPerHost)
-    option that permits limiting the maximum number of connections
-    per host.
+<!-- CL 71272 -->
+The [`Transport`](/pkg/net/http/#Transport) type has a
+new [`MaxConnsPerHost`](/pkg/net/http/#Transport.MaxConnsPerHost)
+option that permits limiting the maximum number of connections
+per host.
 
-    <!-- CL 79919 -->
-    The [`Cookie`](/pkg/net/http/#Cookie) type has a new
-    [`SameSite`](/pkg/net/http/#Cookie.SameSite) field
-    (of new type also named
-    [`SameSite`](/pkg/net/http/#SameSite)) to represent the new cookie attribute recently supported by most browsers.
-    The `net/http`'s `Transport` does not use the `SameSite`
-    attribute itself, but the package supports parsing and serializing the
-    attribute for browsers to use.
+<!-- CL 79919 -->
+The [`Cookie`](/pkg/net/http/#Cookie) type has a new
+[`SameSite`](/pkg/net/http/#Cookie.SameSite) field
+(of new type also named
+[`SameSite`](/pkg/net/http/#SameSite)) to represent the new cookie attribute recently supported by most browsers.
+The `net/http`'s `Transport` does not use the `SameSite`
+attribute itself, but the package supports parsing and serializing the
+attribute for browsers to use.
 
-    <!-- CL 81778 -->
-    It is no longer allowed to reuse a [`Server`](/pkg/net/http/#Server)
-    after a call to
-    [`Shutdown`](/pkg/net/http/#Server.Shutdown) or
-    [`Close`](/pkg/net/http/#Server.Close). It was never officially supported
-    in the past and had often surprising behavior. Now, all future calls to the server's `Serve`
-    methods will return errors after a shutdown or close.
+<!-- CL 81778 -->
+It is no longer allowed to reuse a [`Server`](/pkg/net/http/#Server)
+after a call to
+[`Shutdown`](/pkg/net/http/#Server.Shutdown) or
+[`Close`](/pkg/net/http/#Server.Close). It was never officially supported
+in the past and had often surprising behavior. Now, all future calls to the server's `Serve`
+methods will return errors after a shutdown or close.
 
-    <!-- CL 89275 was reverted before Go 1.11 -->
+<!-- CL 89275 was reverted before Go 1.11 -->
 
-    <!-- CL 93296 -->
-    The constant `StatusMisdirectedRequest` is now defined for HTTP status code 421.
+<!-- CL 93296 -->
+The constant `StatusMisdirectedRequest` is now defined for HTTP status code 421.
 
-    <!-- CL 123875 -->
-    The HTTP server will no longer cancel contexts or send on
-    [`CloseNotifier`](/pkg/net/http/#CloseNotifier)
-    channels upon receiving pipelined HTTP/1.1 requests. Browsers do
-    not use HTTP pipelining, but some clients (such as
-    Debian's `apt`) may be configured to do so.
+<!-- CL 123875 -->
+The HTTP server will no longer cancel contexts or send on
+[`CloseNotifier`](/pkg/net/http/#CloseNotifier)
+channels upon receiving pipelined HTTP/1.1 requests. Browsers do
+not use HTTP pipelining, but some clients (such as
+Debian's `apt`) may be configured to do so.
 
-    <!-- CL 115255 -->
-    [`ProxyFromEnvironment`](/pkg/net/http/#ProxyFromEnvironment), which is used by the
-    [`DefaultTransport`](/pkg/net/http/#DefaultTransport), now
-    supports CIDR notation and ports in the `NO_PROXY` environment variable.
+<!-- CL 115255 -->
+[`ProxyFromEnvironment`](/pkg/net/http/#ProxyFromEnvironment), which is used by the
+[`DefaultTransport`](/pkg/net/http/#DefaultTransport), now
+supports CIDR notation and ports in the `NO_PROXY` environment variable.
 
 <!-- net/http -->
 
-[net/http/httputil](/pkg/net/http/httputil/)
+#### [net/http/httputil](/pkg/net/http/httputil/)
 
-:   <!-- CL 77410 -->
-    The
-    [`ReverseProxy`](/pkg/net/http/httputil/#ReverseProxy)
-    has a new
-    [`ErrorHandler`](/pkg/net/http/httputil/#ReverseProxy.ErrorHandler)
-    option to permit changing how errors are handled.
+<!-- CL 77410 -->
+The
+[`ReverseProxy`](/pkg/net/http/httputil/#ReverseProxy)
+has a new
+[`ErrorHandler`](/pkg/net/http/httputil/#ReverseProxy.ErrorHandler)
+option to permit changing how errors are handled.
 
-    <!-- CL 115135 -->
-    The `ReverseProxy` now also passes
-    "`TE:`&nbsp;`trailers`" request headers
-    through to the backend, as required by the gRPC protocol.
+<!-- CL 115135 -->
+The `ReverseProxy` now also passes
+"`TE:`&nbsp;`trailers`" request headers
+through to the backend, as required by the gRPC protocol.
 
 <!-- net/http/httputil -->
 
-[os](/pkg/os/)
+#### [os](/pkg/os/)
 
-:   <!-- CL 78835 -->
-    The new [`UserCacheDir`](/pkg/os/#UserCacheDir) function
-    returns the default root directory to use for user-specific cached data.
+<!-- CL 78835 -->
+The new [`UserCacheDir`](/pkg/os/#UserCacheDir) function
+returns the default root directory to use for user-specific cached data.
 
-    <!-- CL 94856 -->
-    The new [`ModeIrregular`](/pkg/os/#ModeIrregular)
-    is a [`FileMode`](/pkg/os/#FileMode) bit to represent
-    that a file is not a regular file, but nothing else is known about it, or that
-    it's not a socket, device, named pipe, symlink, or other file type for which
-    Go has a defined mode bit.
+<!-- CL 94856 -->
+The new [`ModeIrregular`](/pkg/os/#ModeIrregular)
+is a [`FileMode`](/pkg/os/#FileMode) bit to represent
+that a file is not a regular file, but nothing else is known about it, or that
+it's not a socket, device, named pipe, symlink, or other file type for which
+Go has a defined mode bit.
 
-    <!-- CL 99337 -->
-    [`Symlink`](/pkg/os/#Symlink) now works
-    for unprivileged users on Windows 10 on machines with Developer
-    Mode enabled.
+<!-- CL 99337 -->
+[`Symlink`](/pkg/os/#Symlink) now works
+for unprivileged users on Windows 10 on machines with Developer
+Mode enabled.
 
-    <!-- CL 100077 -->
-    When a non-blocking descriptor is passed
-    to [`NewFile`](/pkg/os#NewFile), the
-    resulting `*File` will be kept in non-blocking
-    mode. This means that I/O for that `*File` will use
-    the runtime poller rather than a separate thread, and that
-    the [`SetDeadline`](/pkg/os/#File.SetDeadline)
-    methods will work.
+<!-- CL 100077 -->
+When a non-blocking descriptor is passed
+to [`NewFile`](/pkg/os#NewFile), the
+resulting `*File` will be kept in non-blocking
+mode. This means that I/O for that `*File` will use
+the runtime poller rather than a separate thread, and that
+the [`SetDeadline`](/pkg/os/#File.SetDeadline)
+methods will work.
 
 <!-- os -->
 
-[os/signal](/pkg/os/signal/)
+#### [os/signal](/pkg/os/signal/)
 
-:   <!-- CL 108376 -->
-    The new [`Ignored`](/pkg/os/signal/#Ignored) function reports
-    whether a signal is currently ignored.
+<!-- CL 108376 -->
+The new [`Ignored`](/pkg/os/signal/#Ignored) function reports
+whether a signal is currently ignored.
 
 <!-- os/signal -->
 
-[os/user](/pkg/os/user/)
+#### [os/user](/pkg/os/user/)
 
-:   <!-- CL 92456 -->
-    The `os/user` package can now be built in pure Go
-    mode using the build tag "`osusergo`",
-    independent of the use of the environment
-    variable `CGO_ENABLED=0`. Previously the only way to use
-    the package's pure Go implementation was to disable `cgo`
-    support across the entire program.
+<!-- CL 92456 -->
+The `os/user` package can now be built in pure Go
+mode using the build tag "`osusergo`",
+independent of the use of the environment
+variable `CGO_ENABLED=0`. Previously the only way to use
+the package's pure Go implementation was to disable `cgo`
+support across the entire program.
 
 <!-- os/user -->
 
 <!-- CL 101715 was reverted -->
 
-[runtime](/pkg/runtime/)
+#### [runtime](/pkg/runtime/)
 
-:   <!-- CL 70993 -->
-    Setting the <code>GODEBUG=tracebackancestors=_N_</code>
-    environment variable now extends tracebacks with the stacks at
-    which goroutines were created, where _N_ limits the
-    number of ancestor goroutines to report.
+<!-- CL 70993 -->
+Setting the <code>GODEBUG=tracebackancestors=_N_</code>
+environment variable now extends tracebacks with the stacks at
+which goroutines were created, where _N_ limits the
+number of ancestor goroutines to report.
 
 <!-- runtime -->
 
-[runtime/pprof](/pkg/runtime/pprof/)
+#### [runtime/pprof](/pkg/runtime/pprof/)
 
-:   <!-- CL 102696 -->
-    This release adds a new "allocs" profile type that profiles
-    total number of bytes allocated since the program began
-    (including garbage-collected bytes). This is identical to the
-    existing "heap" profile viewed in `-alloc_space` mode.
-    Now `go test -memprofile=...` reports an "allocs" profile
-    instead of "heap" profile.
+<!-- CL 102696 -->
+This release adds a new "allocs" profile type that profiles
+total number of bytes allocated since the program began
+(including garbage-collected bytes). This is identical to the
+existing "heap" profile viewed in `-alloc_space` mode.
+Now `go test -memprofile=...` reports an "allocs" profile
+instead of "heap" profile.
 
 <!-- runtime/pprof -->
 
-[sync](/pkg/sync/)
+#### [sync](/pkg/sync/)
 
-:   <!-- CL 87095 -->
-    The mutex profile now includes reader/writer contention
-    for [`RWMutex`](/pkg/sync/#RWMutex).
-    Writer/writer contention was already included in the mutex
-    profile.
+<!-- CL 87095 -->
+The mutex profile now includes reader/writer contention
+for [`RWMutex`](/pkg/sync/#RWMutex).
+Writer/writer contention was already included in the mutex
+profile.
 
 <!-- sync -->
 
-[syscall](/pkg/syscall/)
+#### [syscall](/pkg/syscall/)
 
-:   <!-- CL 106275 -->
-    On Windows, several fields were changed from `uintptr` to a new
-    [`Pointer`](/pkg/syscall/?GOOS=windows&GOARCH=amd64#Pointer)
-    type to avoid problems with Go's garbage collector. The same change was made
-    to the [`golang.org/x/sys/windows`](https://godoc.org/golang.org/x/sys/windows)
-    package. For any code affected, users should first migrate away from the `syscall`
-    package to the `golang.org/x/sys/windows` package, and then change
-    to using the `Pointer`, while obeying the
-    [`unsafe.Pointer` conversion rules](/pkg/unsafe/#Pointer).
+<!-- CL 106275 -->
+On Windows, several fields were changed from `uintptr` to a new
+[`Pointer`](/pkg/syscall/?GOOS=windows&GOARCH=amd64#Pointer)
+type to avoid problems with Go's garbage collector. The same change was made
+to the [`golang.org/x/sys/windows`](https://godoc.org/golang.org/x/sys/windows)
+package. For any code affected, users should first migrate away from the `syscall`
+package to the `golang.org/x/sys/windows` package, and then change
+to using the `Pointer`, while obeying the
+[`unsafe.Pointer` conversion rules](/pkg/unsafe/#Pointer).
 
-    <!-- CL 118658 -->
-    On Linux, the `flags` parameter to
-    [`Faccessat`](/pkg/syscall/?GOOS=linux&GOARCH=amd64#Faccessat)
-    is now implemented just as in glibc. In earlier Go releases the
-    flags parameter was ignored.
+<!-- CL 118658 -->
+On Linux, the `flags` parameter to
+[`Faccessat`](/pkg/syscall/?GOOS=linux&GOARCH=amd64#Faccessat)
+is now implemented just as in glibc. In earlier Go releases the
+flags parameter was ignored.
 
-    <!-- CL 118658 -->
-    On Linux, the `flags` parameter to
-    [`Fchmodat`](/pkg/syscall/?GOOS=linux&GOARCH=amd64#Fchmodat)
-    is now validated. Linux's `fchmodat` doesn't support the `flags` parameter
-    so we now mimic glibc's behavior and return an error if it's non-zero.
+<!-- CL 118658 -->
+On Linux, the `flags` parameter to
+[`Fchmodat`](/pkg/syscall/?GOOS=linux&GOARCH=amd64#Fchmodat)
+is now validated. Linux's `fchmodat` doesn't support the `flags` parameter
+so we now mimic glibc's behavior and return an error if it's non-zero.
 
 <!-- syscall -->
 
-[text/scanner](/pkg/text/scanner/)
+#### [text/scanner](/pkg/text/scanner/)
 
-:   <!-- CL 112037 -->
-    The [`Scanner.Scan`](/pkg/text/scanner/#Scanner.Scan) method now returns
-    the [`RawString`](/pkg/text/scanner/#RawString) token
-    instead of [`String`](/pkg/text/scanner/#String)
-    for raw string literals.
+<!-- CL 112037 -->
+The [`Scanner.Scan`](/pkg/text/scanner/#Scanner.Scan) method now returns
+the [`RawString`](/pkg/text/scanner/#RawString) token
+instead of [`String`](/pkg/text/scanner/#String)
+for raw string literals.
 
 <!-- text/scanner -->
 
-[text/template](/pkg/text/template/)
+#### [text/template](/pkg/text/template/)
 
-:   <!-- CL 84480 -->
-    Modifying template variables via assignments is now permitted via the `=` token:
+<!-- CL 84480 -->
+Modifying template variables via assignments is now permitted via the `=` token:
 
-    	  {{ $v := "init" }}
-    	  {{ if true }}
-    	    {{ $v = "changed" }}
-    	  {{ end }}
-    	  v: {{ $v }} {{/* "changed" */}}
+	  {{ $v := "init" }}
+	  {{ if true }}
+	    {{ $v = "changed" }}
+	  {{ end }}
+	  v: {{ $v }} {{/* "changed" */}}
 
-    <!-- CL 95215 -->
-    In previous versions untyped `nil` values passed to
-    template functions were ignored. They are now passed as normal
-    arguments.
+<!-- CL 95215 -->
+In previous versions untyped `nil` values passed to
+template functions were ignored. They are now passed as normal
+arguments.
 
 <!-- text/template -->
 
-[time](/pkg/time/)
+#### [time](/pkg/time/)
 
-:   <!-- CL 98157 -->
-    Parsing of timezones denoted by sign and offset is now
-    supported. In previous versions, numeric timezone names
-    (such as `+03`) were not considered valid, and only
-    three-letter abbreviations (such as `MST`) were accepted
-    when expecting a timezone name.
+<!-- CL 98157 -->
+Parsing of timezones denoted by sign and offset is now
+supported. In previous versions, numeric timezone names
+(such as `+03`) were not considered valid, and only
+three-letter abbreviations (such as `MST`) were accepted
+when expecting a timezone name.
 
 <!-- time -->
diff --git a/_content/doc/go1.12.md b/_content/doc/go1.12.md
index d3f3f93..4281d26 100644
--- a/_content/doc/go1.12.md
+++ b/_content/doc/go1.12.md
@@ -390,437 +390,437 @@
 
 <!-- TODO: CL 115677: https://golang.org/cl/115677: cmd/vet: check embedded field tags too -->
 
-[bufio](/pkg/bufio/)
+#### [bufio](/pkg/bufio/)
 
-:   <!-- CL 149297 -->
-    `Reader`'s [`UnreadRune`](/pkg/bufio/#Reader.UnreadRune) and
-    [`UnreadByte`](/pkg/bufio/#Reader.UnreadByte) methods will now return an error
-    if they are called after [`Peek`](/pkg/bufio/#Reader.Peek).
+<!-- CL 149297 -->
+`Reader`'s [`UnreadRune`](/pkg/bufio/#Reader.UnreadRune) and
+[`UnreadByte`](/pkg/bufio/#Reader.UnreadByte) methods will now return an error
+if they are called after [`Peek`](/pkg/bufio/#Reader.Peek).
 
 <!-- bufio -->
 
-[bytes](/pkg/bytes/)
+#### [bytes](/pkg/bytes/)
 
-:   <!-- CL 137855 -->
-    The new function [`ReplaceAll`](/pkg/bytes/#ReplaceAll) returns a copy of
-    a byte slice with all non-overlapping instances of a value replaced by another.
+<!-- CL 137855 -->
+The new function [`ReplaceAll`](/pkg/bytes/#ReplaceAll) returns a copy of
+a byte slice with all non-overlapping instances of a value replaced by another.
 
-    <!-- CL 145098 -->
-    A pointer to a zero-value [`Reader`](/pkg/bytes/#Reader) is now
-    functionally equivalent to [`NewReader`](/pkg/bytes/#NewReader)`(nil)`.
-    Prior to Go 1.12, the former could not be used as a substitute for the latter in all cases.
+<!-- CL 145098 -->
+A pointer to a zero-value [`Reader`](/pkg/bytes/#Reader) is now
+functionally equivalent to [`NewReader`](/pkg/bytes/#NewReader)`(nil)`.
+Prior to Go 1.12, the former could not be used as a substitute for the latter in all cases.
 
 <!-- bytes -->
 
-[crypto/rand](/pkg/crypto/rand/)
+#### [crypto/rand](/pkg/crypto/rand/)
 
-:   <!-- CL 139419 -->
-    A warning will now be printed to standard error the first time
-    `Reader.Read` is blocked for more than 60 seconds waiting
-    to read entropy from the kernel.
+<!-- CL 139419 -->
+A warning will now be printed to standard error the first time
+`Reader.Read` is blocked for more than 60 seconds waiting
+to read entropy from the kernel.
 
-    <!-- CL 120055 -->
-    On FreeBSD, `Reader` now uses the `getrandom`
-    system call if available, `/dev/urandom` otherwise.
+<!-- CL 120055 -->
+On FreeBSD, `Reader` now uses the `getrandom`
+system call if available, `/dev/urandom` otherwise.
 
 <!-- crypto/rand -->
 
-[crypto/rc4](/pkg/crypto/rc4/)
+#### [crypto/rc4](/pkg/crypto/rc4/)
 
-:   <!-- CL 130397 -->
-    This release removes the assembly implementations, leaving only
-    the pure Go version. The Go compiler generates code that is
-    either slightly better or slightly worse, depending on the exact
-    CPU. RC4 is insecure and should only be used for compatibility
-    with legacy systems.
+<!-- CL 130397 -->
+This release removes the assembly implementations, leaving only
+the pure Go version. The Go compiler generates code that is
+either slightly better or slightly worse, depending on the exact
+CPU. RC4 is insecure and should only be used for compatibility
+with legacy systems.
 
 <!-- crypto/rc4 -->
 
-[crypto/tls](/pkg/crypto/tls/)
+#### [crypto/tls](/pkg/crypto/tls/)
 
-:   <!-- CL 143177 -->
-    If a client sends an initial message that does not look like TLS, the server
-    will no longer reply with an alert, and it will expose the underlying
-    `net.Conn` in the new field `Conn` of
-    [`RecordHeaderError`](/pkg/crypto/tls/#RecordHeaderError).
+<!-- CL 143177 -->
+If a client sends an initial message that does not look like TLS, the server
+will no longer reply with an alert, and it will expose the underlying
+`net.Conn` in the new field `Conn` of
+[`RecordHeaderError`](/pkg/crypto/tls/#RecordHeaderError).
 
 <!-- crypto/tls -->
 
-[database/sql](/pkg/database/sql/)
+#### [database/sql](/pkg/database/sql/)
 
-:   <!-- CL 145738 -->
-    A query cursor can now be obtained by passing a
-    [`*Rows`](/pkg/database/sql/#Rows)
-    value to the [`Row.Scan`](/pkg/database/sql/#Row.Scan) method.
+<!-- CL 145738 -->
+A query cursor can now be obtained by passing a
+[`*Rows`](/pkg/database/sql/#Rows)
+value to the [`Row.Scan`](/pkg/database/sql/#Row.Scan) method.
 
 <!-- database/sql -->
 
-[expvar](/pkg/expvar/)
+#### [expvar](/pkg/expvar/)
 
-:   <!-- CL 139537 -->
-    The new [`Delete`](/pkg/expvar/#Map.Delete) method allows
-    for deletion of key/value pairs from a [`Map`](/pkg/expvar/#Map).
+<!-- CL 139537 -->
+The new [`Delete`](/pkg/expvar/#Map.Delete) method allows
+for deletion of key/value pairs from a [`Map`](/pkg/expvar/#Map).
 
 <!-- expvar -->
 
-[fmt](/pkg/fmt/)
+#### [fmt](/pkg/fmt/)
 
-:   <!-- CL 142737 -->
-    Maps are now printed in key-sorted order to ease testing. The ordering rules are:
+<!-- CL 142737 -->
+Maps are now printed in key-sorted order to ease testing. The ordering rules are:
 
-      - When applicable, nil compares low
-      - ints, floats, and strings order by <
-      - NaN compares less than non-NaN floats
-      - bool compares false before true
-      - Complex compares real, then imaginary
-      - Pointers compare by machine address
-      - Channel values compare by machine address
-      - Structs compare each field in turn
-      - Arrays compare each element in turn
-      - Interface values compare first by `reflect.Type` describing the concrete type
-        and then by concrete value as described in the previous rules.
+  - When applicable, nil compares low
+  - ints, floats, and strings order by <
+  - NaN compares less than non-NaN floats
+  - bool compares false before true
+  - Complex compares real, then imaginary
+  - Pointers compare by machine address
+  - Channel values compare by machine address
+  - Structs compare each field in turn
+  - Arrays compare each element in turn
+  - Interface values compare first by `reflect.Type` describing the concrete type
+    and then by concrete value as described in the previous rules.
 
 
-    <!-- CL 129777 -->
-    When printing maps, non-reflexive key values like `NaN` were previously
-    displayed as `<nil>`. As of this release, the correct values are printed.
+<!-- CL 129777 -->
+When printing maps, non-reflexive key values like `NaN` were previously
+displayed as `<nil>`. As of this release, the correct values are printed.
 
 <!-- fmt -->
 
-[go/doc](/pkg/go/doc/)
+#### [go/doc](/pkg/go/doc/)
 
-:   <!-- CL 140958 -->
-    To address some outstanding issues in [`cmd/doc`](/cmd/doc/),
-    this package has a new [`Mode`](/pkg/go/doc/#Mode) bit,
-    `PreserveAST`, which controls whether AST data is cleared.
+<!-- CL 140958 -->
+To address some outstanding issues in [`cmd/doc`](/cmd/doc/),
+this package has a new [`Mode`](/pkg/go/doc/#Mode) bit,
+`PreserveAST`, which controls whether AST data is cleared.
 
 <!-- go/doc -->
 
-[go/token](/pkg/go/token/)
+#### [go/token](/pkg/go/token/)
 
-:   <!-- CL 134075 -->
-    The [`File`](/pkg/go/token#File) type has a new
-    [`LineStart`](/pkg/go/token#File.LineStart) field,
-    which returns the position of the start of a given line. This is especially useful
-    in programs that occasionally handle non-Go files, such as assembly, but wish to use
-    the `token.Pos` mechanism to identify file positions.
+<!-- CL 134075 -->
+The [`File`](/pkg/go/token#File) type has a new
+[`LineStart`](/pkg/go/token#File.LineStart) field,
+which returns the position of the start of a given line. This is especially useful
+in programs that occasionally handle non-Go files, such as assembly, but wish to use
+the `token.Pos` mechanism to identify file positions.
 
 <!-- go/token -->
 
-[image](/pkg/image/)
+#### [image](/pkg/image/)
 
-:   <!-- CL 118755 -->
-    The [`RegisterFormat`](/pkg/image/#RegisterFormat) function is now safe for concurrent use.
+<!-- CL 118755 -->
+The [`RegisterFormat`](/pkg/image/#RegisterFormat) function is now safe for concurrent use.
 
 <!-- image -->
 
-[image/png](/pkg/image/png/)
+#### [image/png](/pkg/image/png/)
 
-:   <!-- CL 134235 -->
-    Paletted images with fewer than 16 colors now encode to smaller outputs.
+<!-- CL 134235 -->
+Paletted images with fewer than 16 colors now encode to smaller outputs.
 
 <!-- image/png -->
 
-[io](/pkg/io/)
+#### [io](/pkg/io/)
 
-:   <!-- CL 139457 -->
-    The new [`StringWriter`](/pkg/io#StringWriter) interface wraps the
-    [`WriteString`](/pkg/io/#WriteString) function.
+<!-- CL 139457 -->
+The new [`StringWriter`](/pkg/io#StringWriter) interface wraps the
+[`WriteString`](/pkg/io/#WriteString) function.
 
 <!-- io -->
 
-[math](/pkg/math/)
+#### [math](/pkg/math/)
 
-:   <!-- CL 153059 -->
-    The functions
-    [`Sin`](/pkg/math/#Sin),
-    [`Cos`](/pkg/math/#Cos),
-    [`Tan`](/pkg/math/#Tan),
-    and [`Sincos`](/pkg/math/#Sincos) now
-    apply Payne-Hanek range reduction to huge arguments. This
-    produces more accurate answers, but they will not be bit-for-bit
-    identical with the results in earlier releases.
+<!-- CL 153059 -->
+The functions
+[`Sin`](/pkg/math/#Sin),
+[`Cos`](/pkg/math/#Cos),
+[`Tan`](/pkg/math/#Tan),
+and [`Sincos`](/pkg/math/#Sincos) now
+apply Payne-Hanek range reduction to huge arguments. This
+produces more accurate answers, but they will not be bit-for-bit
+identical with the results in earlier releases.
 
 <!-- math -->
 
-[math/bits](/pkg/math/bits/)
+#### [math/bits](/pkg/math/bits/)
 
-:   <!-- CL 123157 -->
-    New extended precision operations [`Add`](/pkg/math/bits/#Add), [`Sub`](/pkg/math/bits/#Sub), [`Mul`](/pkg/math/bits/#Mul), and [`Div`](/pkg/math/bits/#Div) are available in `uint`, `uint32`, and `uint64` versions.
+<!-- CL 123157 -->
+New extended precision operations [`Add`](/pkg/math/bits/#Add), [`Sub`](/pkg/math/bits/#Sub), [`Mul`](/pkg/math/bits/#Mul), and [`Div`](/pkg/math/bits/#Div) are available in `uint`, `uint32`, and `uint64` versions.
 
 <!-- math/bits -->
 
-[net](/pkg/net/)
+#### [net](/pkg/net/)
 
-:   <!-- CL 146659 -->
-    The
-    [`Dialer.DualStack`](/pkg/net/#Dialer.DualStack) setting is now ignored and deprecated;
-    RFC 6555 Fast Fallback ("Happy Eyeballs") is now enabled by default. To disable, set
-    [`Dialer.FallbackDelay`](/pkg/net/#Dialer.FallbackDelay) to a negative value.
+<!-- CL 146659 -->
+The
+[`Dialer.DualStack`](/pkg/net/#Dialer.DualStack) setting is now ignored and deprecated;
+RFC 6555 Fast Fallback ("Happy Eyeballs") is now enabled by default. To disable, set
+[`Dialer.FallbackDelay`](/pkg/net/#Dialer.FallbackDelay) to a negative value.
 
-    <!-- CL 107196 -->
-    Similarly, TCP keep-alives are now enabled by default if
-    [`Dialer.KeepAlive`](/pkg/net/#Dialer.KeepAlive) is zero.
-    To disable, set it to a negative value.
+<!-- CL 107196 -->
+Similarly, TCP keep-alives are now enabled by default if
+[`Dialer.KeepAlive`](/pkg/net/#Dialer.KeepAlive) is zero.
+To disable, set it to a negative value.
 
-    <!-- CL 113997 -->
-    On Linux, the [`splice` system call](https://man7.org/linux/man-pages/man2/splice.2.html) is now used when copying from a
-    [`UnixConn`](/pkg/net/#UnixConn) to a
-    [`TCPConn`](/pkg/net/#TCPConn).
+<!-- CL 113997 -->
+On Linux, the [`splice` system call](https://man7.org/linux/man-pages/man2/splice.2.html) is now used when copying from a
+[`UnixConn`](/pkg/net/#UnixConn) to a
+[`TCPConn`](/pkg/net/#TCPConn).
 
 <!-- net -->
 
-[net/http](/pkg/net/http/)
+#### [net/http](/pkg/net/http/)
 
-:   <!-- CL 143177 -->
-    The HTTP server now rejects misdirected HTTP requests to HTTPS servers with a plaintext "400 Bad Request" response.
+<!-- CL 143177 -->
+The HTTP server now rejects misdirected HTTP requests to HTTPS servers with a plaintext "400 Bad Request" response.
 
-    <!-- CL 130115 -->
-    The new [`Client.CloseIdleConnections`](/pkg/net/http/#Client.CloseIdleConnections)
-    method calls the `Client`'s underlying `Transport`'s `CloseIdleConnections`
-    if it has one.
+<!-- CL 130115 -->
+The new [`Client.CloseIdleConnections`](/pkg/net/http/#Client.CloseIdleConnections)
+method calls the `Client`'s underlying `Transport`'s `CloseIdleConnections`
+if it has one.
 
-    <!-- CL 145398 -->
-    The [`Transport`](/pkg/net/http/#Transport) no longer rejects HTTP responses which declare
-    HTTP Trailers but don't use chunked encoding. Instead, the declared trailers are now just ignored.
+<!-- CL 145398 -->
+The [`Transport`](/pkg/net/http/#Transport) no longer rejects HTTP responses which declare
+HTTP Trailers but don't use chunked encoding. Instead, the declared trailers are now just ignored.
 
-    <!-- CL 152080 -->
-    <!-- CL 151857 -->
-    The [`Transport`](/pkg/net/http/#Transport) no longer handles `MAX_CONCURRENT_STREAMS` values
-    advertised from HTTP/2 servers as strictly as it did during Go 1.10 and Go 1.11. The default behavior is now back
-    to how it was in Go 1.9: each connection to a server can have up to `MAX_CONCURRENT_STREAMS` requests
-    active and then new TCP connections are created as needed. In Go 1.10 and Go 1.11 the `http2` package
-    would block and wait for requests to finish instead of creating new connections.
-    To get the stricter behavior back, import the
-    [`golang.org/x/net/http2`](https://godoc.org/golang.org/x/net/http2) package
-    directly and set
-    [`Transport.StrictMaxConcurrentStreams`](https://godoc.org/golang.org/x/net/http2#Transport.StrictMaxConcurrentStreams) to
-    `true`.
+<!-- CL 152080 -->
+<!-- CL 151857 -->
+The [`Transport`](/pkg/net/http/#Transport) no longer handles `MAX_CONCURRENT_STREAMS` values
+advertised from HTTP/2 servers as strictly as it did during Go 1.10 and Go 1.11. The default behavior is now back
+to how it was in Go 1.9: each connection to a server can have up to `MAX_CONCURRENT_STREAMS` requests
+active and then new TCP connections are created as needed. In Go 1.10 and Go 1.11 the `http2` package
+would block and wait for requests to finish instead of creating new connections.
+To get the stricter behavior back, import the
+[`golang.org/x/net/http2`](https://godoc.org/golang.org/x/net/http2) package
+directly and set
+[`Transport.StrictMaxConcurrentStreams`](https://godoc.org/golang.org/x/net/http2#Transport.StrictMaxConcurrentStreams) to
+`true`.
 
 <!-- net/http -->
 
-[net/url](/pkg/net/url/)
+#### [net/url](/pkg/net/url/)
 
-:   <!-- CL 159157, CL 160178 -->
-    [`Parse`](/pkg/net/url/#Parse),
-    [`ParseRequestURI`](/pkg/net/url/#ParseRequestURI),
-    and
-    [`URL.Parse`](/pkg/net/url/#URL.Parse)
-    now return an
-    error for URLs containing ASCII control characters, which includes NULL,
-    tab, and newlines.
+<!-- CL 159157, CL 160178 -->
+[`Parse`](/pkg/net/url/#Parse),
+[`ParseRequestURI`](/pkg/net/url/#ParseRequestURI),
+and
+[`URL.Parse`](/pkg/net/url/#URL.Parse)
+now return an
+error for URLs containing ASCII control characters, which includes NULL,
+tab, and newlines.
 
 <!-- net/url -->
 
-[net/http/httputil](/pkg/net/http/httputil/)
+#### [net/http/httputil](/pkg/net/http/httputil/)
 
-:   <!-- CL 146437 -->
-    The [`ReverseProxy`](/pkg/net/http/httputil/#ReverseProxy) now automatically
-    proxies WebSocket requests.
+<!-- CL 146437 -->
+The [`ReverseProxy`](/pkg/net/http/httputil/#ReverseProxy) now automatically
+proxies WebSocket requests.
 
 <!-- net/http/httputil -->
 
-[os](/pkg/os/)
+#### [os](/pkg/os/)
 
-:   <!-- CL 125443 -->
-    The new [`ProcessState.ExitCode`](/pkg/os/#ProcessState.ExitCode) method
-    returns the process's exit code.
+<!-- CL 125443 -->
+The new [`ProcessState.ExitCode`](/pkg/os/#ProcessState.ExitCode) method
+returns the process's exit code.
 
-    <!-- CL 135075 -->
-    `ModeCharDevice` has been added to the `ModeType` bitmask, allowing for
-    `ModeDevice | ModeCharDevice` to be recovered when masking a
-    [`FileMode`](/pkg/os/#FileMode) with `ModeType`.
+<!-- CL 135075 -->
+`ModeCharDevice` has been added to the `ModeType` bitmask, allowing for
+`ModeDevice | ModeCharDevice` to be recovered when masking a
+[`FileMode`](/pkg/os/#FileMode) with `ModeType`.
 
-    <!-- CL 139418 -->
-    The new function [`UserHomeDir`](/pkg/os/#UserHomeDir) returns the
-    current user's home directory.
+<!-- CL 139418 -->
+The new function [`UserHomeDir`](/pkg/os/#UserHomeDir) returns the
+current user's home directory.
 
-    <!-- CL 146020 -->
-    [`RemoveAll`](/pkg/os/#RemoveAll) now supports paths longer than 4096 characters
-    on most Unix systems.
+<!-- CL 146020 -->
+[`RemoveAll`](/pkg/os/#RemoveAll) now supports paths longer than 4096 characters
+on most Unix systems.
 
-    <!-- CL 130676 -->
-    [`File.Sync`](/pkg/os/#File.Sync) now uses `F_FULLFSYNC` on macOS
-    to correctly flush the file contents to permanent storage.
-    This may cause the method to run more slowly than in previous releases.
+<!-- CL 130676 -->
+[`File.Sync`](/pkg/os/#File.Sync) now uses `F_FULLFSYNC` on macOS
+to correctly flush the file contents to permanent storage.
+This may cause the method to run more slowly than in previous releases.
 
-    <!--CL 155517 -->
-    [`File`](/pkg/os/#File) now supports
-    a [`SyscallConn`](/pkg/os/#File.SyscallConn)
-    method returning
-    a [`syscall.RawConn`](/pkg/syscall/#RawConn)
-    interface value. This may be used to invoke system-specific
-    operations on the underlying file descriptor.
+<!--CL 155517 -->
+[`File`](/pkg/os/#File) now supports
+a [`SyscallConn`](/pkg/os/#File.SyscallConn)
+method returning
+a [`syscall.RawConn`](/pkg/syscall/#RawConn)
+interface value. This may be used to invoke system-specific
+operations on the underlying file descriptor.
 
 <!-- os -->
 
-[path/filepath](/pkg/path/filepath/)
+#### [path/filepath](/pkg/path/filepath/)
 
-:   <!-- CL 145220 -->
-    The [`IsAbs`](/pkg/path/filepath/#IsAbs) function now returns true when passed
-    a reserved filename on Windows such as `NUL`.
-    [List of reserved names.](https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file#naming-conventions)
+<!-- CL 145220 -->
+The [`IsAbs`](/pkg/path/filepath/#IsAbs) function now returns true when passed
+a reserved filename on Windows such as `NUL`.
+[List of reserved names.](https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file#naming-conventions)
 
 <!-- path/filepath -->
 
-[reflect](/pkg/reflect/)
+#### [reflect](/pkg/reflect/)
 
-:   <!-- CL 33572 -->
-    A new [`MapIter`](/pkg/reflect#MapIter) type is
-    an iterator for ranging over a map. This type is exposed through the
-    [`Value`](/pkg/reflect#Value) type's new
-    [`MapRange`](/pkg/reflect#Value.MapRange) method.
-    This follows the same iteration semantics as a range statement, with `Next`
-    to advance the iterator, and `Key`/`Value` to access each entry.
+<!-- CL 33572 -->
+A new [`MapIter`](/pkg/reflect#MapIter) type is
+an iterator for ranging over a map. This type is exposed through the
+[`Value`](/pkg/reflect#Value) type's new
+[`MapRange`](/pkg/reflect#Value.MapRange) method.
+This follows the same iteration semantics as a range statement, with `Next`
+to advance the iterator, and `Key`/`Value` to access each entry.
 
 <!-- reflect -->
 
-[regexp](/pkg/regexp/)
+#### [regexp](/pkg/regexp/)
 
-:   <!-- CL 139784 -->
-    [`Copy`](/pkg/regexp/#Regexp.Copy) is no longer necessary
-    to avoid lock contention, so it has been given a partial deprecation comment.
-    [`Copy`](/pkg/regexp/#Regexp.Copy)
-    may still be appropriate if the reason for its use is to make two copies with
-    different [`Longest`](/pkg/regexp/#Regexp.Longest) settings.
+<!-- CL 139784 -->
+[`Copy`](/pkg/regexp/#Regexp.Copy) is no longer necessary
+to avoid lock contention, so it has been given a partial deprecation comment.
+[`Copy`](/pkg/regexp/#Regexp.Copy)
+may still be appropriate if the reason for its use is to make two copies with
+different [`Longest`](/pkg/regexp/#Regexp.Longest) settings.
 
 <!-- regexp -->
 
-[runtime/debug](/pkg/runtime/debug/)
+#### [runtime/debug](/pkg/runtime/debug/)
 
-:   <!-- CL 144220 -->
-    A new [`BuildInfo`](/pkg/runtime/debug/#BuildInfo) type
-    exposes the build information read from the running binary, available only in
-    binaries built with module support. This includes the main package path, main
-    module information, and the module dependencies. This type is given through the
-    [`ReadBuildInfo`](/pkg/runtime/debug/#ReadBuildInfo) function
-    on [`BuildInfo`](/pkg/runtime/debug/#BuildInfo).
+<!-- CL 144220 -->
+A new [`BuildInfo`](/pkg/runtime/debug/#BuildInfo) type
+exposes the build information read from the running binary, available only in
+binaries built with module support. This includes the main package path, main
+module information, and the module dependencies. This type is given through the
+[`ReadBuildInfo`](/pkg/runtime/debug/#ReadBuildInfo) function
+on [`BuildInfo`](/pkg/runtime/debug/#BuildInfo).
 
 <!-- runtime/debug -->
 
-[strings](/pkg/strings/)
+#### [strings](/pkg/strings/)
 
-:   <!-- CL 137855 -->
-    The new function [`ReplaceAll`](/pkg/strings/#ReplaceAll) returns a copy of
-    a string with all non-overlapping instances of a value replaced by another.
+<!-- CL 137855 -->
+The new function [`ReplaceAll`](/pkg/strings/#ReplaceAll) returns a copy of
+a string with all non-overlapping instances of a value replaced by another.
 
-    <!-- CL 145098 -->
-    A pointer to a zero-value [`Reader`](/pkg/strings/#Reader) is now
-    functionally equivalent to [`NewReader`](/pkg/strings/#NewReader)`(nil)`.
-    Prior to Go 1.12, the former could not be used as a substitute for the latter in all cases.
+<!-- CL 145098 -->
+A pointer to a zero-value [`Reader`](/pkg/strings/#Reader) is now
+functionally equivalent to [`NewReader`](/pkg/strings/#NewReader)`(nil)`.
+Prior to Go 1.12, the former could not be used as a substitute for the latter in all cases.
 
-    <!-- CL 122835 -->
-    The new [`Builder.Cap`](/pkg/strings/#Builder.Cap) method returns the capacity of the builder's underlying byte slice.
+<!-- CL 122835 -->
+The new [`Builder.Cap`](/pkg/strings/#Builder.Cap) method returns the capacity of the builder's underlying byte slice.
 
-    <!-- CL 131495 -->
-    The character mapping functions [`Map`](/pkg/strings/#Map),
-    [`Title`](/pkg/strings/#Title),
-    [`ToLower`](/pkg/strings/#ToLower),
-    [`ToLowerSpecial`](/pkg/strings/#ToLowerSpecial),
-    [`ToTitle`](/pkg/strings/#ToTitle),
-    [`ToTitleSpecial`](/pkg/strings/#ToTitleSpecial),
-    [`ToUpper`](/pkg/strings/#ToUpper), and
-    [`ToUpperSpecial`](/pkg/strings/#ToUpperSpecial)
-    now always guarantee to return valid UTF-8. In earlier releases, if the input was invalid UTF-8 but no character replacements
-    needed to be applied, these routines incorrectly returned the invalid UTF-8 unmodified.
+<!-- CL 131495 -->
+The character mapping functions [`Map`](/pkg/strings/#Map),
+[`Title`](/pkg/strings/#Title),
+[`ToLower`](/pkg/strings/#ToLower),
+[`ToLowerSpecial`](/pkg/strings/#ToLowerSpecial),
+[`ToTitle`](/pkg/strings/#ToTitle),
+[`ToTitleSpecial`](/pkg/strings/#ToTitleSpecial),
+[`ToUpper`](/pkg/strings/#ToUpper), and
+[`ToUpperSpecial`](/pkg/strings/#ToUpperSpecial)
+now always guarantee to return valid UTF-8. In earlier releases, if the input was invalid UTF-8 but no character replacements
+needed to be applied, these routines incorrectly returned the invalid UTF-8 unmodified.
 
 <!-- strings -->
 
-[syscall](/pkg/syscall/)
+#### [syscall](/pkg/syscall/)
 
-:   <!-- CL 138595 -->
-    64-bit inodes are now supported on FreeBSD 12. Some types have been adjusted accordingly.
+<!-- CL 138595 -->
+64-bit inodes are now supported on FreeBSD 12. Some types have been adjusted accordingly.
 
-    <!-- CL 125456 -->
-    The Unix socket
-    ([`AF_UNIX`](https://blogs.msdn.microsoft.com/commandline/2017/12/19/af_unix-comes-to-windows/))
-    address family is now supported for compatible versions of Windows.
+<!-- CL 125456 -->
+The Unix socket
+([`AF_UNIX`](https://blogs.msdn.microsoft.com/commandline/2017/12/19/af_unix-comes-to-windows/))
+address family is now supported for compatible versions of Windows.
 
-    <!-- CL 147117 -->
-    The new function [`Syscall18`](/pkg/syscall/?GOOS=windows&GOARCH=amd64#Syscall18)
-    has been introduced for Windows, allowing for calls with up to 18 arguments.
+<!-- CL 147117 -->
+The new function [`Syscall18`](/pkg/syscall/?GOOS=windows&GOARCH=amd64#Syscall18)
+has been introduced for Windows, allowing for calls with up to 18 arguments.
 
 <!-- syscall -->
 
-[syscall/js](/pkg/syscall/js/)
+#### [syscall/js](/pkg/syscall/js/)
 
-:   <!-- CL 153559 -->
+<!-- CL 153559 -->
 
-    The `Callback` type and `NewCallback` function have been renamed;
-    they are now called
-    [`Func`](/pkg/syscall/js/?GOOS=js&GOARCH=wasm#Func) and
-    [`FuncOf`](/pkg/syscall/js/?GOOS=js&GOARCH=wasm#FuncOf), respectively.
-    This is a breaking change, but WebAssembly support is still experimental
-    and not yet subject to the
-    [Go 1 compatibility promise](/doc/go1compat). Any code using the
-    old names will need to be updated.
+The `Callback` type and `NewCallback` function have been renamed;
+they are now called
+[`Func`](/pkg/syscall/js/?GOOS=js&GOARCH=wasm#Func) and
+[`FuncOf`](/pkg/syscall/js/?GOOS=js&GOARCH=wasm#FuncOf), respectively.
+This is a breaking change, but WebAssembly support is still experimental
+and not yet subject to the
+[Go 1 compatibility promise](/doc/go1compat). Any code using the
+old names will need to be updated.
 
-    <!-- CL 141644 -->
-    If a type implements the new
-    [`Wrapper`](/pkg/syscall/js/?GOOS=js&GOARCH=wasm#Wrapper)
-    interface,
-    [`ValueOf`](/pkg/syscall/js/?GOOS=js&GOARCH=wasm#ValueOf)
-    will use it to return the JavaScript value for that type.
+<!-- CL 141644 -->
+If a type implements the new
+[`Wrapper`](/pkg/syscall/js/?GOOS=js&GOARCH=wasm#Wrapper)
+interface,
+[`ValueOf`](/pkg/syscall/js/?GOOS=js&GOARCH=wasm#ValueOf)
+will use it to return the JavaScript value for that type.
 
-    <!-- CL 143137 -->
-    The meaning of the zero
-    [`Value`](/pkg/syscall/js/?GOOS=js&GOARCH=wasm#Value)
-    has changed. It now represents the JavaScript `undefined` value
-    instead of the number zero.
-    This is a breaking change, but WebAssembly support is still experimental
-    and not yet subject to the
-    [Go 1 compatibility promise](/doc/go1compat). Any code relying on
-    the zero [`Value`](/pkg/syscall/js/?GOOS=js&GOARCH=wasm#Value)
-    to mean the number zero will need to be updated.
+<!-- CL 143137 -->
+The meaning of the zero
+[`Value`](/pkg/syscall/js/?GOOS=js&GOARCH=wasm#Value)
+has changed. It now represents the JavaScript `undefined` value
+instead of the number zero.
+This is a breaking change, but WebAssembly support is still experimental
+and not yet subject to the
+[Go 1 compatibility promise](/doc/go1compat). Any code relying on
+the zero [`Value`](/pkg/syscall/js/?GOOS=js&GOARCH=wasm#Value)
+to mean the number zero will need to be updated.
 
-    <!-- CL 144384 -->
-    The new
-    [`Value.Truthy`](/pkg/syscall/js/?GOOS=js&GOARCH=wasm#Value.Truthy)
-    method reports the
-    [JavaScript "truthiness"](https://developer.mozilla.org/en-US/docs/Glossary/Truthy)
-    of a given value.
+<!-- CL 144384 -->
+The new
+[`Value.Truthy`](/pkg/syscall/js/?GOOS=js&GOARCH=wasm#Value.Truthy)
+method reports the
+[JavaScript "truthiness"](https://developer.mozilla.org/en-US/docs/Glossary/Truthy)
+of a given value.
 
 <!-- syscall/js -->
 
-[testing](/pkg/testing/)
+#### [testing](/pkg/testing/)
 
-:   <!-- CL 139258 -->
-    The [`-benchtime`](/cmd/go/#hdr-Testing_flags) flag now supports setting an explicit iteration count instead of a time when the value ends with an "`x`". For example, `-benchtime=100x` runs the benchmark 100 times.
+<!-- CL 139258 -->
+The [`-benchtime`](/cmd/go/#hdr-Testing_flags) flag now supports setting an explicit iteration count instead of a time when the value ends with an "`x`". For example, `-benchtime=100x` runs the benchmark 100 times.
 
 <!-- testing -->
 
-[text/template](/pkg/text/template/)
+#### [text/template](/pkg/text/template/)
 
-:   <!-- CL 142217 -->
-    When executing a template, long context values are no longer truncated in errors.
+<!-- CL 142217 -->
+When executing a template, long context values are no longer truncated in errors.
 
-    `executing "tmpl" at <.very.deep.context.v...>: map has no entry for key "notpresent"`
+`executing "tmpl" at <.very.deep.context.v...>: map has no entry for key "notpresent"`
 
-    is now
+is now
 
-    `executing "tmpl" at <.very.deep.context.value.notpresent>: map has no entry for key "notpresent"`
+`executing "tmpl" at <.very.deep.context.value.notpresent>: map has no entry for key "notpresent"`
 
-    <!-- CL 143097 -->
-    If a user-defined function called by a template panics, the
-    panic is now caught and returned as an error by
-    the `Execute` or `ExecuteTemplate` method.
+<!-- CL 143097 -->
+If a user-defined function called by a template panics, the
+panic is now caught and returned as an error by
+the `Execute` or `ExecuteTemplate` method.
 
 <!-- text/template -->
 
-[time](/pkg/time/)
+#### [time](/pkg/time/)
 
-:   <!-- CL 151299 -->
-    The time zone database in `$GOROOT/lib/time/zoneinfo.zip`
-    has been updated to version 2018i. Note that this ZIP file is
-    only used if a time zone database is not provided by the operating
-    system.
+<!-- CL 151299 -->
+The time zone database in `$GOROOT/lib/time/zoneinfo.zip`
+has been updated to version 2018i. Note that this ZIP file is
+only used if a time zone database is not provided by the operating
+system.
 
 <!-- time -->
 
-[unsafe](/pkg/unsafe/)
+#### [unsafe](/pkg/unsafe/)
 
-:   <!-- CL 146058 -->
-    It is invalid to convert a nil `unsafe.Pointer` to `uintptr` and back with arithmetic.
-    (This was already invalid, but will now cause the compiler to misbehave.)
+<!-- CL 146058 -->
+It is invalid to convert a nil `unsafe.Pointer` to `uintptr` and back with arithmetic.
+(This was already invalid, but will now cause the compiler to misbehave.)
 
 <!-- unsafe -->
diff --git a/_content/doc/go1.13.md b/_content/doc/go1.13.md
index 1d37b78..e9e63bf 100644
--- a/_content/doc/go1.13.md
+++ b/_content/doc/go1.13.md
@@ -478,434 +478,434 @@
 made with the Go 1 [promise of compatibility](/doc/go1compat)
 in mind.
 
-[bytes](/pkg/bytes/)
+#### [bytes](/pkg/bytes/)
 
-:   The new [`ToValidUTF8`](/pkg/bytes/#ToValidUTF8) function returns a
-    copy of a given byte slice with each run of invalid UTF-8 byte sequences replaced by a given slice.
+The new [`ToValidUTF8`](/pkg/bytes/#ToValidUTF8) function returns a
+copy of a given byte slice with each run of invalid UTF-8 byte sequences replaced by a given slice.
 
 <!-- bytes -->
 
-[context](/pkg/context/)
+#### [context](/pkg/context/)
 
-:   <!-- CL 169080 -->
-    The formatting of contexts returned by [`WithValue`](/pkg/context/#WithValue) no longer depends on `fmt` and will not stringify in the same way. Code that depends on the exact previous stringification might be affected.
+<!-- CL 169080 -->
+The formatting of contexts returned by [`WithValue`](/pkg/context/#WithValue) no longer depends on `fmt` and will not stringify in the same way. Code that depends on the exact previous stringification might be affected.
 
 <!-- context -->
 
-[crypto/tls](/pkg/crypto/tls/)
+#### [crypto/tls](/pkg/crypto/tls/)
 
-:   Support for SSL version 3.0 (SSLv3) [
-    is now deprecated and will be removed in Go 1.14](/issue/32716). Note that SSLv3 is the
-    [cryptographically broken](https://tools.ietf.org/html/rfc7568)
-    protocol predating TLS.
+Support for SSL version 3.0 (SSLv3) [
+is now deprecated and will be removed in Go 1.14](/issue/32716). Note that SSLv3 is the
+[cryptographically broken](https://tools.ietf.org/html/rfc7568)
+protocol predating TLS.
 
-    SSLv3 was always disabled by default, other than in Go 1.12, when it was
-    mistakenly enabled by default server-side. It is now again disabled by
-    default. (SSLv3 was never supported client-side.)
+SSLv3 was always disabled by default, other than in Go 1.12, when it was
+mistakenly enabled by default server-side. It is now again disabled by
+default. (SSLv3 was never supported client-side.)
 
-    <!-- CL 177698 -->
-    Ed25519 certificates are now supported in TLS versions 1.2 and 1.3.
+<!-- CL 177698 -->
+Ed25519 certificates are now supported in TLS versions 1.2 and 1.3.
 
 <!-- crypto/tls -->
 
-[crypto/x509](/pkg/crypto/x509/)
+#### [crypto/x509](/pkg/crypto/x509/)
 
-:   <!-- CL 175478 -->
-    Ed25519 keys are now supported in certificates and certificate requests
-    according to [RFC 8410](https://www.rfc-editor.org/info/rfc8410), as well as by the
-    [`ParsePKCS8PrivateKey`](/pkg/crypto/x509/#ParsePKCS8PrivateKey),
-    [`MarshalPKCS8PrivateKey`](/pkg/crypto/x509/#MarshalPKCS8PrivateKey),
-    and [`ParsePKIXPublicKey`](/pkg/crypto/x509/#ParsePKIXPublicKey) functions.
+<!-- CL 175478 -->
+Ed25519 keys are now supported in certificates and certificate requests
+according to [RFC 8410](https://www.rfc-editor.org/info/rfc8410), as well as by the
+[`ParsePKCS8PrivateKey`](/pkg/crypto/x509/#ParsePKCS8PrivateKey),
+[`MarshalPKCS8PrivateKey`](/pkg/crypto/x509/#MarshalPKCS8PrivateKey),
+and [`ParsePKIXPublicKey`](/pkg/crypto/x509/#ParsePKIXPublicKey) functions.
 
-    <!-- CL 169238 -->
-    The paths searched for system roots now include `/etc/ssl/cert.pem`
-    to support the default location in Alpine Linux 3.7+.
+<!-- CL 169238 -->
+The paths searched for system roots now include `/etc/ssl/cert.pem`
+to support the default location in Alpine Linux 3.7+.
 
 <!-- crypto/x509 -->
 
-[database/sql](/pkg/database/sql/)
+#### [database/sql](/pkg/database/sql/)
 
-:   <!-- CL 170699 -->
-    The new [`NullTime`](/pkg/database/sql/#NullTime) type represents a `time.Time` that may be null.
+<!-- CL 170699 -->
+The new [`NullTime`](/pkg/database/sql/#NullTime) type represents a `time.Time` that may be null.
 
-    <!-- CL 174178 -->
-    The new [`NullInt32`](/pkg/database/sql/#NullInt32) type represents an `int32` that may be null.
+<!-- CL 174178 -->
+The new [`NullInt32`](/pkg/database/sql/#NullInt32) type represents an `int32` that may be null.
 
 <!-- database/sql -->
 
-[debug/dwarf](/pkg/debug/dwarf/)
+#### [debug/dwarf](/pkg/debug/dwarf/)
 
-:   <!-- CL 158797 -->
-    The [`Data.Type`](/pkg/debug/dwarf/#Data.Type)
-    method no longer panics if it encounters an unknown DWARF tag in
-    the type graph. Instead, it represents that component of the
-    type with
-    an [`UnsupportedType`](/pkg/debug/dwarf/#UnsupportedType)
-    object.
+<!-- CL 158797 -->
+The [`Data.Type`](/pkg/debug/dwarf/#Data.Type)
+method no longer panics if it encounters an unknown DWARF tag in
+the type graph. Instead, it represents that component of the
+type with
+an [`UnsupportedType`](/pkg/debug/dwarf/#UnsupportedType)
+object.
 
 <!-- debug/dwarf -->
 
-[errors](/pkg/errors/)
+#### [errors](/pkg/errors/)
 
-:   <!-- CL 163558 -->
+<!-- CL 163558 -->
 
-    The new function [`As`](/pkg/errors/#As) finds the first
-    error in a given error’s chain (sequence of wrapped errors)
-    that matches a given target’s type, and if so, sets the target to that error value.
+The new function [`As`](/pkg/errors/#As) finds the first
+error in a given error’s chain (sequence of wrapped errors)
+that matches a given target’s type, and if so, sets the target to that error value.
 
-    The new function [`Is`](/pkg/errors/#Is) reports whether a given error value matches an
-    error in another’s chain.
+The new function [`Is`](/pkg/errors/#Is) reports whether a given error value matches an
+error in another’s chain.
 
-    The new function [`Unwrap`](/pkg/errors/#Unwrap) returns the result of calling
-    `Unwrap` on a given error, if one exists.
+The new function [`Unwrap`](/pkg/errors/#Unwrap) returns the result of calling
+`Unwrap` on a given error, if one exists.
 
 <!-- errors -->
 
-[fmt](/pkg/fmt/)
+#### [fmt](/pkg/fmt/)
 
-:   <!-- CL 160245 -->
+<!-- CL 160245 -->
 
-    The printing verbs `%x` and `%X` now format floating-point and
-    complex numbers in hexadecimal notation, in lower-case and upper-case respectively.
+The printing verbs `%x` and `%X` now format floating-point and
+complex numbers in hexadecimal notation, in lower-case and upper-case respectively.
 
-    <!-- CL 160246 -->
+<!-- CL 160246 -->
 
-    The new printing verb `%O` formats integers in base 8, emitting the `0o` prefix.
+The new printing verb `%O` formats integers in base 8, emitting the `0o` prefix.
 
-    <!-- CL 160247 -->
+<!-- CL 160247 -->
 
-    The scanner now accepts hexadecimal floating-point values, digit-separating underscores
-    and leading `0b` and `0o` prefixes.
-    See the [Changes to the language](#language) for details.
+The scanner now accepts hexadecimal floating-point values, digit-separating underscores
+and leading `0b` and `0o` prefixes.
+See the [Changes to the language](#language) for details.
 
-    <!-- CL 176998 -->
+<!-- CL 176998 -->
 
-    The [`Errorf`](/pkg/fmt/#Errorf) function
-    has a new verb, `%w`, whose operand must be an error.
-    The error returned from `Errorf` will have an
-    `Unwrap` method which returns the operand of `%w`.
+The [`Errorf`](/pkg/fmt/#Errorf) function
+has a new verb, `%w`, whose operand must be an error.
+The error returned from `Errorf` will have an
+`Unwrap` method which returns the operand of `%w`.
 
 <!-- fmt -->
 
-[go/scanner](/pkg/go/scanner/)
+#### [go/scanner](/pkg/go/scanner/)
 
-:   <!-- CL 175218 -->
-    The scanner has been updated to recognize the new Go number literals, specifically
-    binary literals with `0b`/`0B` prefix, octal literals with `0o`/`0O` prefix,
-    and floating-point numbers with hexadecimal mantissa. The imaginary suffix `i` may now be used with any number
-    literal, and underscores may be used as digit separators for grouping.
-    See the [Changes to the language](#language) for details.
+<!-- CL 175218 -->
+The scanner has been updated to recognize the new Go number literals, specifically
+binary literals with `0b`/`0B` prefix, octal literals with `0o`/`0O` prefix,
+and floating-point numbers with hexadecimal mantissa. The imaginary suffix `i` may now be used with any number
+literal, and underscores may be used as digit separators for grouping.
+See the [Changes to the language](#language) for details.
 
 <!-- go/scanner -->
 
-[go/types](/pkg/go/types/)
+#### [go/types](/pkg/go/types/)
 
-:   The type-checker has been updated to follow the new rules for integer shifts.
-    See the [Changes to the language](#language) for details.
+The type-checker has been updated to follow the new rules for integer shifts.
+See the [Changes to the language](#language) for details.
 
 <!-- go/types -->
 
-[html/template](/pkg/html/template/)
+#### [html/template](/pkg/html/template/)
 
-:   <!-- CL 175218 -->
-    When using a `<script>` tag with "module" set as the
-    type attribute, code will now be interpreted as [JavaScript module script](https://html.spec.whatwg.org/multipage/scripting.html#the-script-element:module-script-2).
+<!-- CL 175218 -->
+When using a `<script>` tag with "module" set as the
+type attribute, code will now be interpreted as [JavaScript module script](https://html.spec.whatwg.org/multipage/scripting.html#the-script-element:module-script-2).
 
 <!-- html/template -->
 
-[log](/pkg/log/)
+#### [log](/pkg/log/)
 
-:   <!-- CL 168920 -->
-    The new [`Writer`](/pkg/log/#Writer) function returns the output destination for the standard logger.
+<!-- CL 168920 -->
+The new [`Writer`](/pkg/log/#Writer) function returns the output destination for the standard logger.
 
 <!-- log -->
 
-[math/big](/pkg/math/big/)
+#### [math/big](/pkg/math/big/)
 
-:   <!-- CL 160682 -->
-    The new [`Rat.SetUint64`](/pkg/math/big/#Rat.SetUint64) method sets the `Rat` to a `uint64` value.
+<!-- CL 160682 -->
+The new [`Rat.SetUint64`](/pkg/math/big/#Rat.SetUint64) method sets the `Rat` to a `uint64` value.
 
-    <!-- CL 166157 -->
-    For [`Float.Parse`](/pkg/math/big/#Float.Parse), if base is 0, underscores
-    may be used between digits for readability.
-    See the [Changes to the language](#language) for details.
+<!-- CL 166157 -->
+For [`Float.Parse`](/pkg/math/big/#Float.Parse), if base is 0, underscores
+may be used between digits for readability.
+See the [Changes to the language](#language) for details.
 
-    <!-- CL 166157 -->
-    For [`Int.SetString`](/pkg/math/big/#Int.SetString), if base is 0, underscores
-    may be used between digits for readability.
-    See the [Changes to the language](#language) for details.
+<!-- CL 166157 -->
+For [`Int.SetString`](/pkg/math/big/#Int.SetString), if base is 0, underscores
+may be used between digits for readability.
+See the [Changes to the language](#language) for details.
 
-    <!-- CL 168237 -->
-    [`Rat.SetString`](/pkg/math/big/#Rat.SetString) now accepts non-decimal floating point representations.
+<!-- CL 168237 -->
+[`Rat.SetString`](/pkg/math/big/#Rat.SetString) now accepts non-decimal floating point representations.
 
 <!-- math/big -->
 
-[math/bits](/pkg/math/bits/)
+#### [math/bits](/pkg/math/bits/)
 
-:   <!-- CL 178177 -->
-    The execution time of [`Add`](/pkg/math/bits/#Add),
-    [`Sub`](/pkg/math/bits/#Sub),
-    [`Mul`](/pkg/math/bits/#Mul),
-    [`RotateLeft`](/pkg/math/bits/#RotateLeft), and
-    [`ReverseBytes`](/pkg/math/bits/#ReverseBytes) is now
-    guaranteed to be independent of the inputs.
+<!-- CL 178177 -->
+The execution time of [`Add`](/pkg/math/bits/#Add),
+[`Sub`](/pkg/math/bits/#Sub),
+[`Mul`](/pkg/math/bits/#Mul),
+[`RotateLeft`](/pkg/math/bits/#RotateLeft), and
+[`ReverseBytes`](/pkg/math/bits/#ReverseBytes) is now
+guaranteed to be independent of the inputs.
 
 <!-- math/bits -->
 
-[net](/pkg/net/)
+#### [net](/pkg/net/)
 
-:   <!-- CL 156366 -->
-    On Unix systems where `use-vc` is set in `resolv.conf`, TCP is used for DNS resolution.
+<!-- CL 156366 -->
+On Unix systems where `use-vc` is set in `resolv.conf`, TCP is used for DNS resolution.
 
-    <!-- CL 170678 -->
-    The new field [`ListenConfig.KeepAlive`](/pkg/net/#ListenConfig.KeepAlive)
-    specifies the keep-alive period for network connections accepted by the listener.
-    If this field is 0 (the default) TCP keep-alives will be enabled.
-    To disable them, set it to a negative value.
+<!-- CL 170678 -->
+The new field [`ListenConfig.KeepAlive`](/pkg/net/#ListenConfig.KeepAlive)
+specifies the keep-alive period for network connections accepted by the listener.
+If this field is 0 (the default) TCP keep-alives will be enabled.
+To disable them, set it to a negative value.
 
-    Note that the error returned from I/O on a connection that was
-    closed by a keep-alive timeout will have a
-    `Timeout` method that returns `true` if called.
-    This can make a keep-alive error difficult to distinguish from
-    an error returned due to a missed deadline as set by the
-    [`SetDeadline`](/pkg/net/#Conn)
-    method and similar methods.
-    Code that uses deadlines and checks for them with
-    the `Timeout` method or
-    with [`os.IsTimeout`](/pkg/os/#IsTimeout)
-    may want to disable keep-alives, or
-    use `errors.Is(syscall.ETIMEDOUT)` (on Unix systems)
-    which will return true for a keep-alive timeout and false for a
-    deadline timeout.
+Note that the error returned from I/O on a connection that was
+closed by a keep-alive timeout will have a
+`Timeout` method that returns `true` if called.
+This can make a keep-alive error difficult to distinguish from
+an error returned due to a missed deadline as set by the
+[`SetDeadline`](/pkg/net/#Conn)
+method and similar methods.
+Code that uses deadlines and checks for them with
+the `Timeout` method or
+with [`os.IsTimeout`](/pkg/os/#IsTimeout)
+may want to disable keep-alives, or
+use `errors.Is(syscall.ETIMEDOUT)` (on Unix systems)
+which will return true for a keep-alive timeout and false for a
+deadline timeout.
 
 <!-- net -->
 
-[net/http](/pkg/net/http/)
+#### [net/http](/pkg/net/http/)
 
-:   <!-- CL 76410 -->
-    The new fields [`Transport.WriteBufferSize`](/pkg/net/http/#Transport.WriteBufferSize)
-    and [`Transport.ReadBufferSize`](/pkg/net/http/#Transport.ReadBufferSize)
-    allow one to specify the sizes of the write and read buffers for a [`Transport`](/pkg/net/http/#Transport).
-    If either field is zero, a default size of 4KB is used.
+<!-- CL 76410 -->
+The new fields [`Transport.WriteBufferSize`](/pkg/net/http/#Transport.WriteBufferSize)
+and [`Transport.ReadBufferSize`](/pkg/net/http/#Transport.ReadBufferSize)
+allow one to specify the sizes of the write and read buffers for a [`Transport`](/pkg/net/http/#Transport).
+If either field is zero, a default size of 4KB is used.
 
-    <!-- CL 130256 -->
-    The new field [`Transport.ForceAttemptHTTP2`](/pkg/net/http/#Transport.ForceAttemptHTTP2)
-    controls whether HTTP/2 is enabled when a non-zero `Dial`, `DialTLS`, or `DialContext`
-    func or `TLSClientConfig` is provided.
+<!-- CL 130256 -->
+The new field [`Transport.ForceAttemptHTTP2`](/pkg/net/http/#Transport.ForceAttemptHTTP2)
+controls whether HTTP/2 is enabled when a non-zero `Dial`, `DialTLS`, or `DialContext`
+func or `TLSClientConfig` is provided.
 
-    <!-- CL 140357 -->
-    [`Transport.MaxConnsPerHost`](/pkg/net/http/#Transport.MaxConnsPerHost) now works
-    properly with HTTP/2.
+<!-- CL 140357 -->
+[`Transport.MaxConnsPerHost`](/pkg/net/http/#Transport.MaxConnsPerHost) now works
+properly with HTTP/2.
 
-    <!-- CL 154383 -->
-    [`TimeoutHandler`](/pkg/net/http/#TimeoutHandler)'s
-    [`ResponseWriter`](/pkg/net/http/#ResponseWriter) now implements the
-    [`Pusher`](/pkg/net/http/#Pusher) interface.
+<!-- CL 154383 -->
+[`TimeoutHandler`](/pkg/net/http/#TimeoutHandler)'s
+[`ResponseWriter`](/pkg/net/http/#ResponseWriter) now implements the
+[`Pusher`](/pkg/net/http/#Pusher) interface.
 
-    <!-- CL 157339 -->
-    The `StatusCode` `103` `"Early Hints"` has been added.
+<!-- CL 157339 -->
+The `StatusCode` `103` `"Early Hints"` has been added.
 
-    <!-- CL 163599 -->
-    [`Transport`](/pkg/net/http/#Transport) now uses the [`Request.Body`](/pkg/net/http/#Request.Body)'s
-    [`io.ReaderFrom`](/pkg/io/#ReaderFrom) implementation if available, to optimize writing the body.
+<!-- CL 163599 -->
+[`Transport`](/pkg/net/http/#Transport) now uses the [`Request.Body`](/pkg/net/http/#Request.Body)'s
+[`io.ReaderFrom`](/pkg/io/#ReaderFrom) implementation if available, to optimize writing the body.
 
-    <!-- CL 167017 -->
-    On encountering unsupported transfer-encodings, [`http.Server`](/pkg/net/http/#Server) now
-    returns a "501 Unimplemented" status as mandated by the HTTP specification [RFC 7230 Section 3.3.1](https://tools.ietf.org/html/rfc7230#section-3.3.1).
+<!-- CL 167017 -->
+On encountering unsupported transfer-encodings, [`http.Server`](/pkg/net/http/#Server) now
+returns a "501 Unimplemented" status as mandated by the HTTP specification [RFC 7230 Section 3.3.1](https://tools.ietf.org/html/rfc7230#section-3.3.1).
 
-    <!-- CL 167681 -->
-    The new [`Server`](/pkg/net/http/#Server) fields
-    [`BaseContext`](/pkg/net/http/#Server.BaseContext) and
-    [`ConnContext`](/pkg/net/http/#Server.ConnContext)
-    allow finer control over the [`Context`](/pkg/context/#Context) values provided to requests and connections.
+<!-- CL 167681 -->
+The new [`Server`](/pkg/net/http/#Server) fields
+[`BaseContext`](/pkg/net/http/#Server.BaseContext) and
+[`ConnContext`](/pkg/net/http/#Server.ConnContext)
+allow finer control over the [`Context`](/pkg/context/#Context) values provided to requests and connections.
 
-    <!-- CL 167781 -->
-    [`http.DetectContentType`](/pkg/net/http/#DetectContentType) now correctly detects RAR signatures, and can now also detect RAR v5 signatures.
+<!-- CL 167781 -->
+[`http.DetectContentType`](/pkg/net/http/#DetectContentType) now correctly detects RAR signatures, and can now also detect RAR v5 signatures.
 
-    <!-- CL 173658 -->
-    The new [`Header`](/pkg/net/http/#Header) method
-    [`Clone`](/pkg/net/http/#Header.Clone) returns a copy of the receiver.
+<!-- CL 173658 -->
+The new [`Header`](/pkg/net/http/#Header) method
+[`Clone`](/pkg/net/http/#Header.Clone) returns a copy of the receiver.
 
-    <!-- CL 174324 -->
-    A new function [`NewRequestWithContext`](/pkg/net/http/#NewRequestWithContext) has been added and it
-    accepts a [`Context`](/pkg/context/#Context) that controls the entire lifetime of
-    the created outgoing [`Request`](/pkg/net/http/#Request), suitable for use with
-    [`Client.Do`](/pkg/net/http/#Client.Do) and [`Transport.RoundTrip`](/pkg/net/http/#Transport.RoundTrip).
+<!-- CL 174324 -->
+A new function [`NewRequestWithContext`](/pkg/net/http/#NewRequestWithContext) has been added and it
+accepts a [`Context`](/pkg/context/#Context) that controls the entire lifetime of
+the created outgoing [`Request`](/pkg/net/http/#Request), suitable for use with
+[`Client.Do`](/pkg/net/http/#Client.Do) and [`Transport.RoundTrip`](/pkg/net/http/#Transport.RoundTrip).
 
-    <!-- CL 179457 -->
-    The [`Transport`](/pkg/net/http/#Transport) no longer logs errors when servers
-    gracefully shut down idle connections using a `"408 Request Timeout"` response.
+<!-- CL 179457 -->
+The [`Transport`](/pkg/net/http/#Transport) no longer logs errors when servers
+gracefully shut down idle connections using a `"408 Request Timeout"` response.
 
 <!-- net/http -->
 
-[os](/pkg/os/)
+#### [os](/pkg/os/)
 
-:   <!-- CL 160877 -->
-    The new [`UserConfigDir`](/pkg/os/#UserConfigDir) function
-    returns the default directory to use for user-specific configuration data.
+<!-- CL 160877 -->
+The new [`UserConfigDir`](/pkg/os/#UserConfigDir) function
+returns the default directory to use for user-specific configuration data.
 
-    <!-- CL 166578 -->
-    If a [`File`](/pkg/os/#File) is opened using the O\_APPEND flag, its
-    [`WriteAt`](/pkg/os/#File.WriteAt) method will always return an error.
+<!-- CL 166578 -->
+If a [`File`](/pkg/os/#File) is opened using the O\_APPEND flag, its
+[`WriteAt`](/pkg/os/#File.WriteAt) method will always return an error.
 
 <!-- os -->
 
-[os/exec](/pkg/os/exec/)
+#### [os/exec](/pkg/os/exec/)
 
-:   <!-- CL 174318 -->
-    On Windows, the environment for a [`Cmd`](/pkg/os/exec/#Cmd) always inherits the
-    `%SYSTEMROOT%` value of the parent process unless the
-    [`Cmd.Env`](/pkg/os/exec/#Cmd.Env) field includes an explicit value for it.
+<!-- CL 174318 -->
+On Windows, the environment for a [`Cmd`](/pkg/os/exec/#Cmd) always inherits the
+`%SYSTEMROOT%` value of the parent process unless the
+[`Cmd.Env`](/pkg/os/exec/#Cmd.Env) field includes an explicit value for it.
 
 <!-- os/exec -->
 
-[reflect](/pkg/reflect/)
+#### [reflect](/pkg/reflect/)
 
-:   <!-- CL 171337 -->
-    The new [`Value.IsZero`](/pkg/reflect/#Value.IsZero) method reports whether a `Value` is the zero value for its type.
+<!-- CL 171337 -->
+The new [`Value.IsZero`](/pkg/reflect/#Value.IsZero) method reports whether a `Value` is the zero value for its type.
 
-    <!-- CL 174531 -->
-    The [`MakeFunc`](/pkg/reflect/#MakeFunc) function now allows assignment conversions on returned values, instead of requiring exact type match. This is particularly useful when the type being returned is an interface type, but the value actually returned is a concrete value implementing that type.
+<!-- CL 174531 -->
+The [`MakeFunc`](/pkg/reflect/#MakeFunc) function now allows assignment conversions on returned values, instead of requiring exact type match. This is particularly useful when the type being returned is an interface type, but the value actually returned is a concrete value implementing that type.
 
 <!-- reflect -->
 
-[runtime](/pkg/runtime/)
+#### [runtime](/pkg/runtime/)
 
-:   <!-- CL 167780 -->
-    Tracebacks, [`runtime.Caller`](/pkg/runtime/#Caller),
-    and [`runtime.Callers`](/pkg/runtime/#Callers) now refer to the function that
-    initializes the global variables of `PKG`
-    as `PKG.init` instead of `PKG.init.ializers`.
+<!-- CL 167780 -->
+Tracebacks, [`runtime.Caller`](/pkg/runtime/#Caller),
+and [`runtime.Callers`](/pkg/runtime/#Callers) now refer to the function that
+initializes the global variables of `PKG`
+as `PKG.init` instead of `PKG.init.ializers`.
 
 <!-- runtime -->
 
-[strconv](/pkg/strconv/)
+#### [strconv](/pkg/strconv/)
 
-:   <!-- CL 160243 -->
-    For [`strconv.ParseFloat`](/pkg/strconv/#ParseFloat),
-    [`strconv.ParseInt`](/pkg/strconv/#ParseInt)
-    and [`strconv.ParseUint`](/pkg/strconv/#ParseUint),
-    if base is 0, underscores may be used between digits for readability.
-    See the [Changes to the language](#language) for details.
+<!-- CL 160243 -->
+For [`strconv.ParseFloat`](/pkg/strconv/#ParseFloat),
+[`strconv.ParseInt`](/pkg/strconv/#ParseInt)
+and [`strconv.ParseUint`](/pkg/strconv/#ParseUint),
+if base is 0, underscores may be used between digits for readability.
+See the [Changes to the language](#language) for details.
 
 <!-- strconv -->
 
-[strings](/pkg/strings/)
+#### [strings](/pkg/strings/)
 
-:   <!-- CL 142003 -->
-    The new [`ToValidUTF8`](/pkg/strings/#ToValidUTF8) function returns a
-    copy of a given string with each run of invalid UTF-8 byte sequences replaced by a given string.
+<!-- CL 142003 -->
+The new [`ToValidUTF8`](/pkg/strings/#ToValidUTF8) function returns a
+copy of a given string with each run of invalid UTF-8 byte sequences replaced by a given string.
 
 <!-- strings -->
 
-[sync](/pkg/sync/)
+#### [sync](/pkg/sync/)
 
-:   <!-- CL 148958, CL 148959, CL 152697, CL 152698 -->
-    The fast paths of [`Mutex.Lock`](/pkg/sync/#Mutex.Lock), [`Mutex.Unlock`](/pkg/sync/#Mutex.Unlock),
-    [`RWMutex.Lock`](/pkg/sync/#RWMutex.Lock), [`RWMutex.RUnlock`](/pkg/sync/#Mutex.RUnlock), and
-    [`Once.Do`](/pkg/sync/#Once.Do) are now inlined in their callers.
-    For the uncontended cases on amd64, these changes make [`Once.Do`](/pkg/sync/#Once.Do) twice as fast, and the
-    [`Mutex`](/pkg/sync/#Mutex)/[`RWMutex`](/pkg/sync/#RWMutex) methods up to 10% faster.
+<!-- CL 148958, CL 148959, CL 152697, CL 152698 -->
+The fast paths of [`Mutex.Lock`](/pkg/sync/#Mutex.Lock), [`Mutex.Unlock`](/pkg/sync/#Mutex.Unlock),
+[`RWMutex.Lock`](/pkg/sync/#RWMutex.Lock), [`RWMutex.RUnlock`](/pkg/sync/#Mutex.RUnlock), and
+[`Once.Do`](/pkg/sync/#Once.Do) are now inlined in their callers.
+For the uncontended cases on amd64, these changes make [`Once.Do`](/pkg/sync/#Once.Do) twice as fast, and the
+[`Mutex`](/pkg/sync/#Mutex)/[`RWMutex`](/pkg/sync/#RWMutex) methods up to 10% faster.
 
-    <!-- CL 166960 -->
-    Large [`Pool`](/pkg/sync/#Pool) no longer increase stop-the-world pause times.
+<!-- CL 166960 -->
+Large [`Pool`](/pkg/sync/#Pool) no longer increase stop-the-world pause times.
 
-    <!-- CL 166961 -->
-    `Pool` no longer needs to be completely repopulated after every GC. It now retains some objects across GCs,
-    as opposed to releasing all objects, reducing load spikes for heavy users of `Pool`.
+<!-- CL 166961 -->
+`Pool` no longer needs to be completely repopulated after every GC. It now retains some objects across GCs,
+as opposed to releasing all objects, reducing load spikes for heavy users of `Pool`.
 
 <!-- sync -->
 
-[syscall](/pkg/syscall/)
+#### [syscall](/pkg/syscall/)
 
-:   <!-- CL 168479 -->
-    Uses of `_getdirentries64` have been removed from
-    Darwin builds, to allow Go binaries to be uploaded to the macOS
-    App Store.
+<!-- CL 168479 -->
+Uses of `_getdirentries64` have been removed from
+Darwin builds, to allow Go binaries to be uploaded to the macOS
+App Store.
 
-    <!-- CL 174197 -->
-    The new `ProcessAttributes` and `ThreadAttributes` fields in
-    [`SysProcAttr`](/pkg/syscall/?GOOS=windows#SysProcAttr) have been introduced for Windows,
-    exposing security settings when creating new processes.
+<!-- CL 174197 -->
+The new `ProcessAttributes` and `ThreadAttributes` fields in
+[`SysProcAttr`](/pkg/syscall/?GOOS=windows#SysProcAttr) have been introduced for Windows,
+exposing security settings when creating new processes.
 
-    <!-- CL 174320 -->
-    `EINVAL` is no longer returned in zero
-    [`Chmod`](/pkg/syscall/?GOOS=windows#Chmod) mode on Windows.
+<!-- CL 174320 -->
+`EINVAL` is no longer returned in zero
+[`Chmod`](/pkg/syscall/?GOOS=windows#Chmod) mode on Windows.
 
-    <!-- CL 191337 -->
-    Values of type `Errno` can be tested against error values in
-    the `os` package,
-    like [`ErrExist`](/pkg/os/#ErrExist), using
-    [`errors.Is`](/pkg/errors/#Is).
+<!-- CL 191337 -->
+Values of type `Errno` can be tested against error values in
+the `os` package,
+like [`ErrExist`](/pkg/os/#ErrExist), using
+[`errors.Is`](/pkg/errors/#Is).
 
 <!-- syscall -->
 
-[syscall/js](/pkg/syscall/js/)
+#### [syscall/js](/pkg/syscall/js/)
 
-:   <!-- CL 177537 -->
-    `TypedArrayOf` has been replaced by
-    [`CopyBytesToGo`](/pkg/syscall/js/#CopyBytesToGo) and
-    [`CopyBytesToJS`](/pkg/syscall/js/#CopyBytesToJS) for copying bytes
-    between a byte slice and a `Uint8Array`.
+<!-- CL 177537 -->
+`TypedArrayOf` has been replaced by
+[`CopyBytesToGo`](/pkg/syscall/js/#CopyBytesToGo) and
+[`CopyBytesToJS`](/pkg/syscall/js/#CopyBytesToJS) for copying bytes
+between a byte slice and a `Uint8Array`.
 
 <!-- syscall/js -->
 
-[testing](/pkg/testing/)
+#### [testing](/pkg/testing/)
 
-:   <!-- CL 112155 -->
-    When running benchmarks, [`B.N`](/pkg/testing/#B.N) is no longer rounded.
+<!-- CL 112155 -->
+When running benchmarks, [`B.N`](/pkg/testing/#B.N) is no longer rounded.
 
-    <!-- CL 166717 -->
-    The new method [`B.ReportMetric`](/pkg/testing/#B.ReportMetric) lets users report
-    custom benchmark metrics and override built-in metrics.
+<!-- CL 166717 -->
+The new method [`B.ReportMetric`](/pkg/testing/#B.ReportMetric) lets users report
+custom benchmark metrics and override built-in metrics.
 
-    <!-- CL 173722 -->
-    Testing flags are now registered in the new [`Init`](/pkg/testing/#Init) function,
-    which is invoked by the generated `main` function for the test.
-    As a result, testing flags are now only registered when running a test binary,
-    and packages that call `flag.Parse` during package initialization may cause tests to fail.
+<!-- CL 173722 -->
+Testing flags are now registered in the new [`Init`](/pkg/testing/#Init) function,
+which is invoked by the generated `main` function for the test.
+As a result, testing flags are now only registered when running a test binary,
+and packages that call `flag.Parse` during package initialization may cause tests to fail.
 
 <!-- testing -->
 
-[text/scanner](/pkg/text/scanner/)
+#### [text/scanner](/pkg/text/scanner/)
 
-:   <!-- CL 183077 -->
-    The scanner has been updated to recognize the new Go number literals, specifically
-    binary literals with `0b`/`0B` prefix, octal literals with `0o`/`0O` prefix,
-    and floating-point numbers with hexadecimal mantissa.
-    Also, the new [`AllowDigitSeparators`](/pkg/text/scanner/#AllowDigitSeparators)
-    mode allows number literals to contain underscores as digit separators (off by default for backwards-compatibility).
-    See the [Changes to the language](#language) for details.
+<!-- CL 183077 -->
+The scanner has been updated to recognize the new Go number literals, specifically
+binary literals with `0b`/`0B` prefix, octal literals with `0o`/`0O` prefix,
+and floating-point numbers with hexadecimal mantissa.
+Also, the new [`AllowDigitSeparators`](/pkg/text/scanner/#AllowDigitSeparators)
+mode allows number literals to contain underscores as digit separators (off by default for backwards-compatibility).
+See the [Changes to the language](#language) for details.
 
 <!-- text/scanner -->
 
-[text/template](/pkg/text/template/)
+#### [text/template](/pkg/text/template/)
 
-:   <!-- CL 161762 -->
-    The new [slice function](/pkg/text/template/#hdr-Functions)
-    returns the result of slicing its first argument by the following arguments.
+<!-- CL 161762 -->
+The new [slice function](/pkg/text/template/#hdr-Functions)
+returns the result of slicing its first argument by the following arguments.
 
 <!-- text/template -->
 
-[time](/pkg/time/)
+#### [time](/pkg/time/)
 
-:   <!-- CL 122876 -->
-    Day-of-year is now supported by [`Format`](/pkg/time/#Time.Format)
-    and [`Parse`](/pkg/time/#Parse).
+<!-- CL 122876 -->
+Day-of-year is now supported by [`Format`](/pkg/time/#Time.Format)
+and [`Parse`](/pkg/time/#Parse).
 
-    <!-- CL 167387 -->
-    The new [`Duration`](/pkg/time/#Duration) methods
-    [`Microseconds`](/pkg/time/#Duration.Microseconds) and
-    [`Milliseconds`](/pkg/time/#Duration.Milliseconds) return
-    the duration as an integer count of their respectively named units.
+<!-- CL 167387 -->
+The new [`Duration`](/pkg/time/#Duration) methods
+[`Microseconds`](/pkg/time/#Duration.Microseconds) and
+[`Milliseconds`](/pkg/time/#Duration.Milliseconds) return
+the duration as an integer count of their respectively named units.
 
 <!-- time -->
 
-[unicode](/pkg/unicode/)
+#### [unicode](/pkg/unicode/)
 
-:   The [`unicode`](/pkg/unicode/) package and associated
-    support throughout the system has been upgraded from Unicode 10.0 to
-    [Unicode 11.0](https://www.unicode.org/versions/Unicode11.0.0/),
-    which adds 684 new characters, including seven new scripts, and 66 new emoji.
+The [`unicode`](/pkg/unicode/) package and associated
+support throughout the system has been upgraded from Unicode 10.0 to
+[Unicode 11.0](https://www.unicode.org/versions/Unicode11.0.0/),
+which adds 684 new characters, including seven new scripts, and 66 new emoji.
 
 <!-- unicode -->
diff --git a/_content/doc/go1.14.md b/_content/doc/go1.14.md
index 1b2e154..0244f4c 100644
--- a/_content/doc/go1.14.md
+++ b/_content/doc/go1.14.md
@@ -375,433 +375,433 @@
 made with the Go 1 [promise of compatibility](/doc/go1compat)
 in mind.
 
-[crypto/tls](/pkg/crypto/tls/)
+#### [crypto/tls](/pkg/crypto/tls/)
 
-:   <!-- CL 191976 -->
-    Support for SSL version 3.0 (SSLv3) has been removed. Note that SSLv3 is the
-    [cryptographically broken](https://tools.ietf.org/html/rfc7568)
-    protocol predating TLS.
+<!-- CL 191976 -->
+Support for SSL version 3.0 (SSLv3) has been removed. Note that SSLv3 is the
+[cryptographically broken](https://tools.ietf.org/html/rfc7568)
+protocol predating TLS.
 
-    <!-- CL 191999 -->
-    TLS 1.3 can't be disabled via the `GODEBUG` environment
-    variable anymore. Use the
-    [`Config.MaxVersion`](/pkg/crypto/tls/#Config.MaxVersion)
-    field to configure TLS versions.
+<!-- CL 191999 -->
+TLS 1.3 can't be disabled via the `GODEBUG` environment
+variable anymore. Use the
+[`Config.MaxVersion`](/pkg/crypto/tls/#Config.MaxVersion)
+field to configure TLS versions.
 
-    <!-- CL 205059 -->
-    When multiple certificate chains are provided through the
-    [`Config.Certificates`](/pkg/crypto/tls/#Config.Certificates)
-    field, the first one compatible with the peer is now automatically
-    selected. This allows for example providing an ECDSA and an RSA
-    certificate, and letting the package automatically select the best one.
-    Note that the performance of this selection is going to be poor unless the
-    [`Certificate.Leaf`](/pkg/crypto/tls/#Certificate.Leaf)
-    field is set. The
-    [`Config.NameToCertificate`](/pkg/crypto/tls/#Config.NameToCertificate)
-    field, which only supports associating a single certificate with
-    a give name, is now deprecated and should be left as `nil`.
-    Similarly the
-    [`Config.BuildNameToCertificate`](/pkg/crypto/tls/#Config.BuildNameToCertificate)
-    method, which builds the `NameToCertificate` field
-    from the leaf certificates, is now deprecated and should not be
-    called.
+<!-- CL 205059 -->
+When multiple certificate chains are provided through the
+[`Config.Certificates`](/pkg/crypto/tls/#Config.Certificates)
+field, the first one compatible with the peer is now automatically
+selected. This allows for example providing an ECDSA and an RSA
+certificate, and letting the package automatically select the best one.
+Note that the performance of this selection is going to be poor unless the
+[`Certificate.Leaf`](/pkg/crypto/tls/#Certificate.Leaf)
+field is set. The
+[`Config.NameToCertificate`](/pkg/crypto/tls/#Config.NameToCertificate)
+field, which only supports associating a single certificate with
+a give name, is now deprecated and should be left as `nil`.
+Similarly the
+[`Config.BuildNameToCertificate`](/pkg/crypto/tls/#Config.BuildNameToCertificate)
+method, which builds the `NameToCertificate` field
+from the leaf certificates, is now deprecated and should not be
+called.
 
-    <!-- CL 175517 -->
-    The new [`CipherSuites`](/pkg/crypto/tls/#CipherSuites)
-    and [`InsecureCipherSuites`](/pkg/crypto/tls/#InsecureCipherSuites)
-    functions return a list of currently implemented cipher suites.
-    The new [`CipherSuiteName`](/pkg/crypto/tls/#CipherSuiteName)
-    function returns a name for a cipher suite ID.
+<!-- CL 175517 -->
+The new [`CipherSuites`](/pkg/crypto/tls/#CipherSuites)
+and [`InsecureCipherSuites`](/pkg/crypto/tls/#InsecureCipherSuites)
+functions return a list of currently implemented cipher suites.
+The new [`CipherSuiteName`](/pkg/crypto/tls/#CipherSuiteName)
+function returns a name for a cipher suite ID.
 
-    <!-- CL 205058, 205057 -->
-    The new [
-    `(*ClientHelloInfo).SupportsCertificate`](/pkg/crypto/tls/#ClientHelloInfo.SupportsCertificate) and
-    [
-    `(*CertificateRequestInfo).SupportsCertificate`](/pkg/crypto/tls/#CertificateRequestInfo.SupportsCertificate)
-    methods expose whether a peer supports a certain certificate.
+<!-- CL 205058, 205057 -->
+The new [
+`(*ClientHelloInfo).SupportsCertificate`](/pkg/crypto/tls/#ClientHelloInfo.SupportsCertificate) and
+[
+`(*CertificateRequestInfo).SupportsCertificate`](/pkg/crypto/tls/#CertificateRequestInfo.SupportsCertificate)
+methods expose whether a peer supports a certain certificate.
 
-    <!-- CL 174329 -->
-    The `tls` package no longer supports the legacy Next Protocol
-    Negotiation (NPN) extension and now only supports ALPN. In previous
-    releases it supported both. There are no API changes and applications
-    should function identically as before. Most other clients and servers have
-    already removed NPN support in favor of the standardized ALPN.
+<!-- CL 174329 -->
+The `tls` package no longer supports the legacy Next Protocol
+Negotiation (NPN) extension and now only supports ALPN. In previous
+releases it supported both. There are no API changes and applications
+should function identically as before. Most other clients and servers have
+already removed NPN support in favor of the standardized ALPN.
 
-    <!-- CL 205063, 205062 -->
-    RSA-PSS signatures are now used when supported in TLS 1.2 handshakes. This
-    won't affect most applications, but custom
-    [`Certificate.PrivateKey`](/pkg/crypto/tls/#Certificate.PrivateKey)
-    implementations that don't support RSA-PSS signatures will need to use the new
-    [
-    `Certificate.SupportedSignatureAlgorithms`](/pkg/crypto/tls/#Certificate.SupportedSignatureAlgorithms)
-    field to disable them.
+<!-- CL 205063, 205062 -->
+RSA-PSS signatures are now used when supported in TLS 1.2 handshakes. This
+won't affect most applications, but custom
+[`Certificate.PrivateKey`](/pkg/crypto/tls/#Certificate.PrivateKey)
+implementations that don't support RSA-PSS signatures will need to use the new
+[
+`Certificate.SupportedSignatureAlgorithms`](/pkg/crypto/tls/#Certificate.SupportedSignatureAlgorithms)
+field to disable them.
 
-    <!-- CL 205059, 205059 -->
-    [`Config.Certificates`](/pkg/crypto/tls/#Config.Certificates) and
-    [`Config.GetCertificate`](/pkg/crypto/tls/#Config.GetCertificate)
-    can now both be nil if
-    [`Config.GetConfigForClient`](/pkg/crypto/tls/#Config.GetConfigForClient)
-    is set. If the callbacks return neither certificates nor an error, the
-    `unrecognized_name` is now sent.
+<!-- CL 205059, 205059 -->
+[`Config.Certificates`](/pkg/crypto/tls/#Config.Certificates) and
+[`Config.GetCertificate`](/pkg/crypto/tls/#Config.GetCertificate)
+can now both be nil if
+[`Config.GetConfigForClient`](/pkg/crypto/tls/#Config.GetConfigForClient)
+is set. If the callbacks return neither certificates nor an error, the
+`unrecognized_name` is now sent.
 
-    <!-- CL 205058 -->
-    The new [`CertificateRequestInfo.Version`](/pkg/crypto/tls/#CertificateRequestInfo.Version)
-    field provides the TLS version to client certificates callbacks.
+<!-- CL 205058 -->
+The new [`CertificateRequestInfo.Version`](/pkg/crypto/tls/#CertificateRequestInfo.Version)
+field provides the TLS version to client certificates callbacks.
 
-    <!-- CL 205068 -->
-    The new `TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256` and
-    `TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256` constants use
-    the final names for the cipher suites previously referred to as
-    `TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305` and
-    `TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305`.
+<!-- CL 205068 -->
+The new `TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256` and
+`TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256` constants use
+the final names for the cipher suites previously referred to as
+`TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305` and
+`TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305`.
 
 <!-- crypto/tls -->
 
-[crypto/x509](/pkg/crypto/x509/)
+#### [crypto/x509](/pkg/crypto/x509/)
 
-:   <!-- CL 204046 -->
-    [`Certificate.CreateCRL`](/pkg/crypto/x509/#Certificate.CreateCRL)
-    now supports Ed25519 issuers.
+<!-- CL 204046 -->
+[`Certificate.CreateCRL`](/pkg/crypto/x509/#Certificate.CreateCRL)
+now supports Ed25519 issuers.
 
-[debug/dwarf](/pkg/debug/dwarf/)
+#### [debug/dwarf](/pkg/debug/dwarf/)
 
-:   <!-- CL 175138 -->
-    The `debug/dwarf` package now supports reading DWARF
-    version 5.
+<!-- CL 175138 -->
+The `debug/dwarf` package now supports reading DWARF
+version 5.
 
-    The new
-    method [`(*Data).AddSection`](/pkg/debug/dwarf/#Data.AddSection)
-    supports adding arbitrary new DWARF sections from the input file
-    to the DWARF `Data`.
+The new
+method [`(*Data).AddSection`](/pkg/debug/dwarf/#Data.AddSection)
+supports adding arbitrary new DWARF sections from the input file
+to the DWARF `Data`.
 
-    <!-- CL 192698 -->
-    The new
-    method [`(*Reader).ByteOrder`](/pkg/debug/dwarf/#Reader.ByteOrder)
-    returns the byte order of the current compilation unit.
-    This may be used to interpret attributes that are encoded in the
-    native ordering, such as location descriptions.
+<!-- CL 192698 -->
+The new
+method [`(*Reader).ByteOrder`](/pkg/debug/dwarf/#Reader.ByteOrder)
+returns the byte order of the current compilation unit.
+This may be used to interpret attributes that are encoded in the
+native ordering, such as location descriptions.
 
-    <!-- CL 192699 -->
-    The new
-    method [`(*LineReader).Files`](/pkg/debug/dwarf/#LineReader.Files)
-    returns the file name table from a line reader.
-    This may be used to interpret the value of DWARF attributes such
-    as `AttrDeclFile`.
+<!-- CL 192699 -->
+The new
+method [`(*LineReader).Files`](/pkg/debug/dwarf/#LineReader.Files)
+returns the file name table from a line reader.
+This may be used to interpret the value of DWARF attributes such
+as `AttrDeclFile`.
 
 <!-- debug/dwarf -->
 
-[encoding/asn1](/pkg/encoding/asn1/)
+#### [encoding/asn1](/pkg/encoding/asn1/)
 
-:   <!-- CL 126624 -->
-    [`Unmarshal`](/pkg/encoding/asn1/#Unmarshal)
-    now supports ASN.1 string type BMPString, represented by the new
-    [`TagBMPString`](/pkg/encoding/asn1/#TagBMPString)
-    constant.
+<!-- CL 126624 -->
+[`Unmarshal`](/pkg/encoding/asn1/#Unmarshal)
+now supports ASN.1 string type BMPString, represented by the new
+[`TagBMPString`](/pkg/encoding/asn1/#TagBMPString)
+constant.
 
 <!-- encoding/asn1 -->
 
-[encoding/json](/pkg/encoding/json/)
+#### [encoding/json](/pkg/encoding/json/)
 
-:   <!-- CL 200677 -->
-    The [`Decoder`](/pkg/encoding/json/#Decoder)
-    type supports a new
-    method [`InputOffset`](/pkg/encoding/json/#Decoder.InputOffset)
-    that returns the input stream byte offset of the current
-    decoder position.
+<!-- CL 200677 -->
+The [`Decoder`](/pkg/encoding/json/#Decoder)
+type supports a new
+method [`InputOffset`](/pkg/encoding/json/#Decoder.InputOffset)
+that returns the input stream byte offset of the current
+decoder position.
 
-    <!-- CL 200217 -->
-    [`Compact`](/pkg/encoding/json/#Compact) no longer
-    escapes the `U+2028` and `U+2029` characters, which
-    was never a documented feature. For proper escaping, see [`HTMLEscape`](/pkg/encoding/json/#HTMLEscape).
+<!-- CL 200217 -->
+[`Compact`](/pkg/encoding/json/#Compact) no longer
+escapes the `U+2028` and `U+2029` characters, which
+was never a documented feature. For proper escaping, see [`HTMLEscape`](/pkg/encoding/json/#HTMLEscape).
 
-    <!-- CL 195045 -->
-    [`Number`](/pkg/encoding/json/#Number) no longer
-    accepts invalid numbers, to follow the documented behavior more closely.
-    If a program needs to accept invalid numbers like the empty string,
-    consider wrapping the type with [`Unmarshaler`](/pkg/encoding/json/#Unmarshaler).
+<!-- CL 195045 -->
+[`Number`](/pkg/encoding/json/#Number) no longer
+accepts invalid numbers, to follow the documented behavior more closely.
+If a program needs to accept invalid numbers like the empty string,
+consider wrapping the type with [`Unmarshaler`](/pkg/encoding/json/#Unmarshaler).
 
-    <!-- CL 200237 -->
-    [`Unmarshal`](/pkg/encoding/json/#Unmarshal)
-    can now support map keys with string underlying type which implement
-    [`encoding.TextUnmarshaler`](/pkg/encoding/#TextUnmarshaler).
+<!-- CL 200237 -->
+[`Unmarshal`](/pkg/encoding/json/#Unmarshal)
+can now support map keys with string underlying type which implement
+[`encoding.TextUnmarshaler`](/pkg/encoding/#TextUnmarshaler).
 
 <!-- encoding/json -->
 
-[go/build](/pkg/go/build/)
+#### [go/build](/pkg/go/build/)
 
-:   <!-- CL 203820, 211657 -->
-    The [`Context`](/pkg/go/build/#Context)
-    type has a new field `Dir` which may be used to set
-    the working directory for the build.
-    The default is the current directory of the running process.
-    In module mode, this is used to locate the main module.
+<!-- CL 203820, 211657 -->
+The [`Context`](/pkg/go/build/#Context)
+type has a new field `Dir` which may be used to set
+the working directory for the build.
+The default is the current directory of the running process.
+In module mode, this is used to locate the main module.
 
 <!-- go/build -->
 
-[go/doc](/pkg/go/doc/)
+#### [go/doc](/pkg/go/doc/)
 
-:   <!-- CL 204830 -->
-    The new
-    function [`NewFromFiles`](/pkg/go/doc/#NewFromFiles)
-    computes package documentation from a list
-    of `*ast.File`'s and associates examples with the
-    appropriate package elements.
-    The new information is available in a new `Examples`
-    field
-    in the [`Package`](/pkg/go/doc/#Package), [`Type`](/pkg/go/doc/#Type),
-    and [`Func`](/pkg/go/doc/#Func) types, and a
-    new [`Suffix`](/pkg/go/doc/#Example.Suffix)
-    field in
-    the [`Example`](/pkg/go/doc/#Example)
-    type.
+<!-- CL 204830 -->
+The new
+function [`NewFromFiles`](/pkg/go/doc/#NewFromFiles)
+computes package documentation from a list
+of `*ast.File`'s and associates examples with the
+appropriate package elements.
+The new information is available in a new `Examples`
+field
+in the [`Package`](/pkg/go/doc/#Package), [`Type`](/pkg/go/doc/#Type),
+and [`Func`](/pkg/go/doc/#Func) types, and a
+new [`Suffix`](/pkg/go/doc/#Example.Suffix)
+field in
+the [`Example`](/pkg/go/doc/#Example)
+type.
 
 <!-- go/doc -->
 
-[io/ioutil](/pkg/io/ioutil/)
+#### [io/ioutil](/pkg/io/ioutil/)
 
-:   <!-- CL 198488 -->
-    [`TempDir`](/pkg/io/ioutil/#TempDir) can now create directories
-    whose names have predictable prefixes and suffixes.
-    As with [`TempFile`](/pkg/io/ioutil/#TempFile), if the pattern
-    contains a '\*', the random string replaces the last '\*'.
+<!-- CL 198488 -->
+[`TempDir`](/pkg/io/ioutil/#TempDir) can now create directories
+whose names have predictable prefixes and suffixes.
+As with [`TempFile`](/pkg/io/ioutil/#TempFile), if the pattern
+contains a '\*', the random string replaces the last '\*'.
 
-[log](/pkg/log/)
+#### [log](/pkg/log/)
 
-:   <!-- CL 186182 -->
-    The
-    new [`Lmsgprefix`](https://tip.golang.org/pkg/log/#pkg-constants)
-    flag may be used to tell the logging functions to emit the
-    optional output prefix immediately before the log message rather
-    than at the start of the line.
+<!-- CL 186182 -->
+The
+new [`Lmsgprefix`](https://tip.golang.org/pkg/log/#pkg-constants)
+flag may be used to tell the logging functions to emit the
+optional output prefix immediately before the log message rather
+than at the start of the line.
 
 <!-- log -->
 
-[math](/pkg/math/)
+#### [math](/pkg/math/)
 
-:   <!-- CL 127458 -->
-    The new [`FMA`](/pkg/math/#FMA) function
-    computes `x*y+z` in floating point with no
-    intermediate rounding of the `x*y`
-    computation. Several architectures implement this computation
-    using dedicated hardware instructions for additional performance.
+<!-- CL 127458 -->
+The new [`FMA`](/pkg/math/#FMA) function
+computes `x*y+z` in floating point with no
+intermediate rounding of the `x*y`
+computation. Several architectures implement this computation
+using dedicated hardware instructions for additional performance.
 
 <!-- math -->
 
-[math/big](/pkg/math/big/)
+#### [math/big](/pkg/math/big/)
 
-:   <!-- CL 164972 -->
-    The [`GCD`](/pkg/math/big/#Int.GCD) method
-    now allows the inputs `a` and `b` to be
-    zero or negative.
+<!-- CL 164972 -->
+The [`GCD`](/pkg/math/big/#Int.GCD) method
+now allows the inputs `a` and `b` to be
+zero or negative.
 
 <!-- math/big -->
 
-[math/bits](/pkg/math/bits/)
+#### [math/bits](/pkg/math/bits/)
 
-:   <!-- CL 197838 -->
-    The new functions
-    [`Rem`](/pkg/math/bits/#Rem),
-    [`Rem32`](/pkg/math/bits/#Rem32), and
-    [`Rem64`](/pkg/math/bits/#Rem64)
-    support computing a remainder even when the quotient overflows.
+<!-- CL 197838 -->
+The new functions
+[`Rem`](/pkg/math/bits/#Rem),
+[`Rem32`](/pkg/math/bits/#Rem32), and
+[`Rem64`](/pkg/math/bits/#Rem64)
+support computing a remainder even when the quotient overflows.
 
 <!-- math/bits -->
 
-[mime](/pkg/mime/)
+#### [mime](/pkg/mime/)
 
-:   <!-- CL 186927 -->
-    The default type of `.js` and `.mjs` files
-    is now `text/javascript` rather
-    than `application/javascript`.
-    This is in accordance
-    with [an
-    IETF draft](https://datatracker.ietf.org/doc/draft-ietf-dispatch-javascript-mjs/) that treats `application/javascript` as obsolete.
+<!-- CL 186927 -->
+The default type of `.js` and `.mjs` files
+is now `text/javascript` rather
+than `application/javascript`.
+This is in accordance
+with [an
+IETF draft](https://datatracker.ietf.org/doc/draft-ietf-dispatch-javascript-mjs/) that treats `application/javascript` as obsolete.
 
 <!-- mime -->
 
-[mime/multipart](/pkg/mime/multipart/)
+#### [mime/multipart](/pkg/mime/multipart/)
 
-:   The
-    new [`Reader`](/pkg/mime/multipart/#Reader)
-    method [`NextRawPart`](/pkg/mime/multipart/#Reader.NextRawPart)
-    supports fetching the next MIME part without transparently
-    decoding `quoted-printable` data.
+The
+new [`Reader`](/pkg/mime/multipart/#Reader)
+method [`NextRawPart`](/pkg/mime/multipart/#Reader.NextRawPart)
+supports fetching the next MIME part without transparently
+decoding `quoted-printable` data.
 
 <!-- mime/multipart -->
 
-[net/http](/pkg/net/http/)
+#### [net/http](/pkg/net/http/)
 
-:   <!-- CL 200760 -->
-    The new [`Header`](/pkg/net/http/#Header)
-    method [`Values`](/pkg/net/http/#Header.Values)
-    can be used to fetch all values associated with a
-    canonicalized key.
+<!-- CL 200760 -->
+The new [`Header`](/pkg/net/http/#Header)
+method [`Values`](/pkg/net/http/#Header.Values)
+can be used to fetch all values associated with a
+canonicalized key.
 
-    <!-- CL 61291 -->
-    The
-    new [`Transport`](/pkg/net/http/#Transport)
-    field [`DialTLSContext`](/pkg/net/http/#Transport.DialTLSContext)
-    can be used to specify an optional dial function for creating
-    TLS connections for non-proxied HTTPS requests.
-    This new field can be used instead
-    of [`DialTLS`](/pkg/net/http/#Transport.DialTLS),
-    which is now considered deprecated; `DialTLS` will
-    continue to work, but new code should
-    use `DialTLSContext`, which allows the transport to
-    cancel dials as soon as they are no longer needed.
+<!-- CL 61291 -->
+The
+new [`Transport`](/pkg/net/http/#Transport)
+field [`DialTLSContext`](/pkg/net/http/#Transport.DialTLSContext)
+can be used to specify an optional dial function for creating
+TLS connections for non-proxied HTTPS requests.
+This new field can be used instead
+of [`DialTLS`](/pkg/net/http/#Transport.DialTLS),
+which is now considered deprecated; `DialTLS` will
+continue to work, but new code should
+use `DialTLSContext`, which allows the transport to
+cancel dials as soon as they are no longer needed.
 
-    <!-- CL 192518, CL 194218 -->
-    On Windows, [`ServeFile`](/pkg/net/http/#ServeFile) now correctly
-    serves files larger than 2GB.
+<!-- CL 192518, CL 194218 -->
+On Windows, [`ServeFile`](/pkg/net/http/#ServeFile) now correctly
+serves files larger than 2GB.
 
 <!-- net/http -->
 
-[net/http/httptest](/pkg/net/http/httptest/)
+#### [net/http/httptest](/pkg/net/http/httptest/)
 
-:   <!-- CL 201557 -->
-    The
-    new [`Server`](/pkg/net/http/httptest/#Server)
-    field [`EnableHTTP2`](/pkg/net/http/httptest/#Server.EnableHTTP2)
-    supports enabling HTTP/2 on the test server.
+<!-- CL 201557 -->
+The
+new [`Server`](/pkg/net/http/httptest/#Server)
+field [`EnableHTTP2`](/pkg/net/http/httptest/#Server.EnableHTTP2)
+supports enabling HTTP/2 on the test server.
 
 <!-- net/http/httptest -->
 
-[net/textproto](/pkg/net/textproto/)
+#### [net/textproto](/pkg/net/textproto/)
 
-:   <!-- CL 200760 -->
-    The
-    new [`MIMEHeader`](/pkg/net/textproto/#MIMEHeader)
-    method [`Values`](/pkg/net/textproto/#MIMEHeader.Values)
-    can be used to fetch all values associated with a canonicalized
-    key.
+<!-- CL 200760 -->
+The
+new [`MIMEHeader`](/pkg/net/textproto/#MIMEHeader)
+method [`Values`](/pkg/net/textproto/#MIMEHeader.Values)
+can be used to fetch all values associated with a canonicalized
+key.
 
 <!-- net/textproto -->
 
-[net/url](/pkg/net/url/)
+#### [net/url](/pkg/net/url/)
 
-:   <!-- CL 185117 -->
-    When parsing of a URL fails
-    (for example by [`Parse`](/pkg/net/url/#Parse)
-    or [`ParseRequestURI`](/pkg/net/url/#ParseRequestURI)),
-    the resulting [`Error`](/pkg/net/url/#Error.Error) message
-    will now quote the unparsable URL.
-    This provides clearer structure and consistency with other parsing errors.
+<!-- CL 185117 -->
+When parsing of a URL fails
+(for example by [`Parse`](/pkg/net/url/#Parse)
+or [`ParseRequestURI`](/pkg/net/url/#ParseRequestURI)),
+the resulting [`Error`](/pkg/net/url/#Error.Error) message
+will now quote the unparsable URL.
+This provides clearer structure and consistency with other parsing errors.
 
 <!-- net/url -->
 
-[os/signal](/pkg/os/signal/)
+#### [os/signal](/pkg/os/signal/)
 
-:   <!-- CL 187739 -->
-    On Windows,
-    the `CTRL_CLOSE_EVENT`, `CTRL_LOGOFF_EVENT`,
-    and `CTRL_SHUTDOWN_EVENT` events now generate
-    a `syscall.SIGTERM` signal, similar to how Control-C
-    and Control-Break generate a `syscall.SIGINT` signal.
+<!-- CL 187739 -->
+On Windows,
+the `CTRL_CLOSE_EVENT`, `CTRL_LOGOFF_EVENT`,
+and `CTRL_SHUTDOWN_EVENT` events now generate
+a `syscall.SIGTERM` signal, similar to how Control-C
+and Control-Break generate a `syscall.SIGINT` signal.
 
 <!-- os/signal -->
 
-[plugin](/pkg/plugin/)
+#### [plugin](/pkg/plugin/)
 
-:   <!-- CL 191617 -->
-    The `plugin` package now supports `freebsd/amd64`.
+<!-- CL 191617 -->
+The `plugin` package now supports `freebsd/amd64`.
 
 <!-- plugin -->
 
-[reflect](/pkg/reflect/)
+#### [reflect](/pkg/reflect/)
 
-:   <!-- CL 85661 -->
-    [`StructOf`](/pkg/reflect#StructOf) now
-    supports creating struct types with unexported fields, by
-    setting the `PkgPath` field in
-    a `StructField` element.
+<!-- CL 85661 -->
+[`StructOf`](/pkg/reflect#StructOf) now
+supports creating struct types with unexported fields, by
+setting the `PkgPath` field in
+a `StructField` element.
 
 <!-- reflect -->
 
-[runtime](/pkg/runtime/)
+#### [runtime](/pkg/runtime/)
 
-:   <!-- CL 200081 -->
-    `runtime.Goexit` can no longer be aborted by a
-    recursive `panic`/`recover`.
+<!-- CL 200081 -->
+`runtime.Goexit` can no longer be aborted by a
+recursive `panic`/`recover`.
 
-    <!-- CL 188297, CL 191785 -->
-    On macOS, `SIGPIPE` is no longer forwarded to signal
-    handlers installed before the Go runtime is initialized.
-    This is necessary because macOS delivers `SIGPIPE`
-    [to the main thread](/issue/33384)
-    rather than the thread writing to the closed pipe.
+<!-- CL 188297, CL 191785 -->
+On macOS, `SIGPIPE` is no longer forwarded to signal
+handlers installed before the Go runtime is initialized.
+This is necessary because macOS delivers `SIGPIPE`
+[to the main thread](/issue/33384)
+rather than the thread writing to the closed pipe.
 
 <!-- runtime -->
 
-[runtime/pprof](/pkg/runtime/pprof/)
+#### [runtime/pprof](/pkg/runtime/pprof/)
 
-:   <!-- CL 204636, 205097 -->
-    The generated profile no longer includes the pseudo-PCs used for inline
-    marks. Symbol information of inlined functions is encoded in
-    [the format](https://github.com/google/pprof/blob/5e96527/proto/profile.proto#L177-L184)
-    the pprof tool expects. This is a fix for the regression introduced
-    during recent releases.
+<!-- CL 204636, 205097 -->
+The generated profile no longer includes the pseudo-PCs used for inline
+marks. Symbol information of inlined functions is encoded in
+[the format](https://github.com/google/pprof/blob/5e96527/proto/profile.proto#L177-L184)
+the pprof tool expects. This is a fix for the regression introduced
+during recent releases.
 
 <!-- runtime/pprof -->
 
-[strconv](/pkg/strconv/)
+#### [strconv](/pkg/strconv/)
 
-:   The [`NumError`](/pkg/strconv/#NumError)
-    type now has
-    an [`Unwrap`](/pkg/strconv/#NumError.Unwrap)
-    method that may be used to retrieve the reason that a conversion
-    failed.
-    This supports using `NumError` values
-    with [`errors.Is`](/pkg/errors/#Is) to see
-    if the underlying error
-    is [`strconv.ErrRange`](/pkg/strconv/#pkg-variables)
-    or [`strconv.ErrSyntax`](/pkg/strconv/#pkg-variables).
+The [`NumError`](/pkg/strconv/#NumError)
+type now has
+an [`Unwrap`](/pkg/strconv/#NumError.Unwrap)
+method that may be used to retrieve the reason that a conversion
+failed.
+This supports using `NumError` values
+with [`errors.Is`](/pkg/errors/#Is) to see
+if the underlying error
+is [`strconv.ErrRange`](/pkg/strconv/#pkg-variables)
+or [`strconv.ErrSyntax`](/pkg/strconv/#pkg-variables).
 
 <!-- strconv -->
 
-[sync](/pkg/sync/)
+#### [sync](/pkg/sync/)
 
-:   <!-- CL 200577 -->
-    Unlocking a highly contended `Mutex` now directly
-    yields the CPU to the next goroutine waiting for
-    that `Mutex`. This significantly improves the
-    performance of highly contended mutexes on high CPU count
-    machines.
+<!-- CL 200577 -->
+Unlocking a highly contended `Mutex` now directly
+yields the CPU to the next goroutine waiting for
+that `Mutex`. This significantly improves the
+performance of highly contended mutexes on high CPU count
+machines.
 
 <!-- sync -->
 
-[testing](/pkg/testing/)
+#### [testing](/pkg/testing/)
 
-:   <!-- CL 201359 -->
-    The testing package now supports cleanup functions, called after
-    a test or benchmark has finished, by calling
-    [`T.Cleanup`](/pkg/testing#T.Cleanup) or
-    [`B.Cleanup`](/pkg/testing#B.Cleanup) respectively.
+<!-- CL 201359 -->
+The testing package now supports cleanup functions, called after
+a test or benchmark has finished, by calling
+[`T.Cleanup`](/pkg/testing#T.Cleanup) or
+[`B.Cleanup`](/pkg/testing#B.Cleanup) respectively.
 
 <!-- testing -->
 
-[text/template](/pkg/text/template/)
+#### [text/template](/pkg/text/template/)
 
-:   <!-- CL 206124 -->
-    The text/template package now correctly reports errors when a
-    parenthesized argument is used as a function.
-    This most commonly shows up in erroneous cases like
-    `{{if (eq .F "a") or (eq .F "b")}}`.
-    This should be written as `{{if or (eq .F "a") (eq .F "b")}}`.
-    The erroneous case never worked as expected, and will now be
-    reported with an error `can't give argument to non-function`.
+<!-- CL 206124 -->
+The text/template package now correctly reports errors when a
+parenthesized argument is used as a function.
+This most commonly shows up in erroneous cases like
+`{{if (eq .F "a") or (eq .F "b")}}`.
+This should be written as `{{if or (eq .F "a") (eq .F "b")}}`.
+The erroneous case never worked as expected, and will now be
+reported with an error `can't give argument to non-function`.
 
-    <!-- CL 207637 -->
-    [`JSEscape`](/pkg/text/template/#JSEscape) now
-    escapes the `&` and `=` characters to
-    mitigate the impact of its output being misused in HTML contexts.
+<!-- CL 207637 -->
+[`JSEscape`](/pkg/text/template/#JSEscape) now
+escapes the `&` and `=` characters to
+mitigate the impact of its output being misused in HTML contexts.
 
 <!-- text/template -->
 
-[unicode](/pkg/unicode/)
+#### [unicode](/pkg/unicode/)
 
-:   The [`unicode`](/pkg/unicode/) package and associated
-    support throughout the system has been upgraded from Unicode 11.0 to
-    [Unicode 12.0](https://www.unicode.org/versions/Unicode12.0.0/),
-    which adds 554 new characters, including four new scripts, and 61 new emoji.
+The [`unicode`](/pkg/unicode/) package and associated
+support throughout the system has been upgraded from Unicode 11.0 to
+[Unicode 12.0](https://www.unicode.org/versions/Unicode12.0.0/),
+which adds 554 new characters, including four new scripts, and 61 new emoji.
 
 <!-- unicode -->
diff --git a/_content/doc/go1.15.md b/_content/doc/go1.15.md
index c3604e2..6ec380b 100644
--- a/_content/doc/go1.15.md
+++ b/_content/doc/go1.15.md
@@ -371,541 +371,541 @@
 made with the Go 1 [promise of compatibility](/doc/go1compat)
 in mind.
 
-[bufio](/pkg/bufio/)
+#### [bufio](/pkg/bufio/)
 
-:   <!-- CL 225357, CL 225557 -->
-    When a [`Scanner`](/pkg/bufio/#Scanner) is
-    used with an invalid
-    [`io.Reader`](/pkg/io/#Reader) that
-    incorrectly returns a negative number from `Read`,
-    the `Scanner` will no longer panic, but will instead
-    return the new error
-    [`ErrBadReadCount`](/pkg/bufio/#ErrBadReadCount).
+<!-- CL 225357, CL 225557 -->
+When a [`Scanner`](/pkg/bufio/#Scanner) is
+used with an invalid
+[`io.Reader`](/pkg/io/#Reader) that
+incorrectly returns a negative number from `Read`,
+the `Scanner` will no longer panic, but will instead
+return the new error
+[`ErrBadReadCount`](/pkg/bufio/#ErrBadReadCount).
 
 <!-- bufio -->
 
-[context](/pkg/context/)
+#### [context](/pkg/context/)
 
-:   <!-- CL 223777 -->
-    Creating a derived `Context` using a nil parent is now explicitly
-    disallowed. Any attempt to do so with the
-    [`WithValue`](/pkg/context/#WithValue),
-    [`WithDeadline`](/pkg/context/#WithDeadline), or
-    [`WithCancel`](/pkg/context/#WithCancel) functions
-    will cause a panic.
+<!-- CL 223777 -->
+Creating a derived `Context` using a nil parent is now explicitly
+disallowed. Any attempt to do so with the
+[`WithValue`](/pkg/context/#WithValue),
+[`WithDeadline`](/pkg/context/#WithDeadline), or
+[`WithCancel`](/pkg/context/#WithCancel) functions
+will cause a panic.
 
 <!-- context -->
 
-[crypto](/pkg/crypto/)
+#### [crypto](/pkg/crypto/)
 
-:   <!-- CL 231417, CL 225460 -->
-    The `PrivateKey` and `PublicKey` types in the
-    [`crypto/rsa`](/pkg/crypto/rsa/),
-    [`crypto/ecdsa`](/pkg/crypto/ecdsa/), and
-    [`crypto/ed25519`](/pkg/crypto/ed25519/) packages
-    now have an `Equal` method to compare keys for equivalence
-    or to make type-safe interfaces for public keys. The method signature
-    is compatible with
-    [`go-cmp`'s
-    definition of equality](https://pkg.go.dev/github.com/google/go-cmp/cmp#Equal).
+<!-- CL 231417, CL 225460 -->
+The `PrivateKey` and `PublicKey` types in the
+[`crypto/rsa`](/pkg/crypto/rsa/),
+[`crypto/ecdsa`](/pkg/crypto/ecdsa/), and
+[`crypto/ed25519`](/pkg/crypto/ed25519/) packages
+now have an `Equal` method to compare keys for equivalence
+or to make type-safe interfaces for public keys. The method signature
+is compatible with
+[`go-cmp`'s
+definition of equality](https://pkg.go.dev/github.com/google/go-cmp/cmp#Equal).
 
-    <!-- CL 224937 -->
-    [`Hash`](/pkg/crypto/#Hash) now implements
-    [`fmt.Stringer`](/pkg/fmt/#Stringer).
+<!-- CL 224937 -->
+[`Hash`](/pkg/crypto/#Hash) now implements
+[`fmt.Stringer`](/pkg/fmt/#Stringer).
 
 <!-- crypto -->
 
-[crypto/ecdsa](/pkg/crypto/ecdsa/)
+#### [crypto/ecdsa](/pkg/crypto/ecdsa/)
 
-:   <!-- CL 217940 -->
-    The new [`SignASN1`](/pkg/crypto/ecdsa/#SignASN1)
-    and [`VerifyASN1`](/pkg/crypto/ecdsa/#VerifyASN1)
-    functions allow generating and verifying ECDSA signatures in the standard
-    ASN.1 DER encoding.
+<!-- CL 217940 -->
+The new [`SignASN1`](/pkg/crypto/ecdsa/#SignASN1)
+and [`VerifyASN1`](/pkg/crypto/ecdsa/#VerifyASN1)
+functions allow generating and verifying ECDSA signatures in the standard
+ASN.1 DER encoding.
 
 <!-- crypto/ecdsa -->
 
-[crypto/elliptic](/pkg/crypto/elliptic/)
+#### [crypto/elliptic](/pkg/crypto/elliptic/)
 
-:   <!-- CL 202819 -->
-    The new [`MarshalCompressed`](/pkg/crypto/elliptic/#MarshalCompressed)
-    and [`UnmarshalCompressed`](/pkg/crypto/elliptic/#UnmarshalCompressed)
-    functions allow encoding and decoding NIST elliptic curve points in compressed format.
+<!-- CL 202819 -->
+The new [`MarshalCompressed`](/pkg/crypto/elliptic/#MarshalCompressed)
+and [`UnmarshalCompressed`](/pkg/crypto/elliptic/#UnmarshalCompressed)
+functions allow encoding and decoding NIST elliptic curve points in compressed format.
 
 <!-- crypto/elliptic -->
 
-[crypto/rsa](/pkg/crypto/rsa/)
+#### [crypto/rsa](/pkg/crypto/rsa/)
 
-:   <!-- CL 226203 -->
-    [`VerifyPKCS1v15`](/pkg/crypto/rsa/#VerifyPKCS1v15)
-    now rejects invalid short signatures with missing leading zeroes, according to RFC 8017.
+<!-- CL 226203 -->
+[`VerifyPKCS1v15`](/pkg/crypto/rsa/#VerifyPKCS1v15)
+now rejects invalid short signatures with missing leading zeroes, according to RFC 8017.
 
 <!-- crypto/rsa -->
 
-[crypto/tls](/pkg/crypto/tls/)
+#### [crypto/tls](/pkg/crypto/tls/)
 
-:   <!-- CL 214977 -->
-    The new
-    [`Dialer`](/pkg/crypto/tls/#Dialer)
-    type and its
-    [`DialContext`](/pkg/crypto/tls/#Dialer.DialContext)
-    method permit using a context to both connect and handshake with a TLS server.
+<!-- CL 214977 -->
+The new
+[`Dialer`](/pkg/crypto/tls/#Dialer)
+type and its
+[`DialContext`](/pkg/crypto/tls/#Dialer.DialContext)
+method permit using a context to both connect and handshake with a TLS server.
 
-    <!-- CL 229122 -->
-    The new
-    [`VerifyConnection`](/pkg/crypto/tls/#Config.VerifyConnection)
-    callback on the [`Config`](/pkg/crypto/tls/#Config) type
-    allows custom verification logic for every connection. It has access to the
-    [`ConnectionState`](/pkg/crypto/tls/#ConnectionState)
-    which includes peer certificates, SCTs, and stapled OCSP responses.
+<!-- CL 229122 -->
+The new
+[`VerifyConnection`](/pkg/crypto/tls/#Config.VerifyConnection)
+callback on the [`Config`](/pkg/crypto/tls/#Config) type
+allows custom verification logic for every connection. It has access to the
+[`ConnectionState`](/pkg/crypto/tls/#ConnectionState)
+which includes peer certificates, SCTs, and stapled OCSP responses.
 
-    <!-- CL 230679 -->
-    Auto-generated session ticket keys are now automatically rotated every 24 hours,
-    with a lifetime of 7 days, to limit their impact on forward secrecy.
+<!-- CL 230679 -->
+Auto-generated session ticket keys are now automatically rotated every 24 hours,
+with a lifetime of 7 days, to limit their impact on forward secrecy.
 
-    <!-- CL 231317 -->
-    Session ticket lifetimes in TLS 1.2 and earlier, where the session keys
-    are reused for resumed connections, are now limited to 7 days, also to
-    limit their impact on forward secrecy.
+<!-- CL 231317 -->
+Session ticket lifetimes in TLS 1.2 and earlier, where the session keys
+are reused for resumed connections, are now limited to 7 days, also to
+limit their impact on forward secrecy.
 
-    <!-- CL 231038 -->
-    The client-side downgrade protection checks specified in RFC 8446 are now
-    enforced. This has the potential to cause connection errors for clients
-    encountering middleboxes that behave like unauthorized downgrade attacks.
+<!-- CL 231038 -->
+The client-side downgrade protection checks specified in RFC 8446 are now
+enforced. This has the potential to cause connection errors for clients
+encountering middleboxes that behave like unauthorized downgrade attacks.
 
-    <!-- CL 208226 -->
-    [`SignatureScheme`](/pkg/crypto/tls/#SignatureScheme),
-    [`CurveID`](/pkg/crypto/tls/#CurveID), and
-    [`ClientAuthType`](/pkg/crypto/tls/#ClientAuthType)
-    now implement [`fmt.Stringer`](/pkg/fmt/#Stringer).
+<!-- CL 208226 -->
+[`SignatureScheme`](/pkg/crypto/tls/#SignatureScheme),
+[`CurveID`](/pkg/crypto/tls/#CurveID), and
+[`ClientAuthType`](/pkg/crypto/tls/#ClientAuthType)
+now implement [`fmt.Stringer`](/pkg/fmt/#Stringer).
 
-    <!-- CL 236737 -->
-    The [`ConnectionState`](/pkg/crypto/tls/#ConnectionState)
-    fields `OCSPResponse` and `SignedCertificateTimestamps`
-    are now repopulated on client-side resumed connections.
+<!-- CL 236737 -->
+The [`ConnectionState`](/pkg/crypto/tls/#ConnectionState)
+fields `OCSPResponse` and `SignedCertificateTimestamps`
+are now repopulated on client-side resumed connections.
 
-    <!-- CL 227840 -->
-    [`tls.Conn`](/pkg/crypto/tls/#Conn)
-    now returns an opaque error on permanently broken connections, wrapping
-    the temporary
-    [`net.Error`](/pkg/net/http/#Error). To access the
-    original `net.Error`, use
-    [`errors.As`](/pkg/errors/#As) (or
-    [`errors.Unwrap`](/pkg/errors/#Unwrap)) instead of a
-    type assertion.
+<!-- CL 227840 -->
+[`tls.Conn`](/pkg/crypto/tls/#Conn)
+now returns an opaque error on permanently broken connections, wrapping
+the temporary
+[`net.Error`](/pkg/net/http/#Error). To access the
+original `net.Error`, use
+[`errors.As`](/pkg/errors/#As) (or
+[`errors.Unwrap`](/pkg/errors/#Unwrap)) instead of a
+type assertion.
 
 <!-- crypto/tls -->
 
-[crypto/x509](/pkg/crypto/x509/)
+#### [crypto/x509](/pkg/crypto/x509/)
 
-:   <!-- CL 231378, CL 231380, CL 231381 -->
-    If either the name on the certificate or the name being verified (with
-    [`VerifyOptions.DNSName`](/pkg/crypto/x509/#VerifyOptions.DNSName)
-    or [`VerifyHostname`](/pkg/crypto/x509/#Certificate.VerifyHostname))
-    are invalid, they will now be compared case-insensitively without further
-    processing (without honoring wildcards or stripping trailing dots).
-    Invalid names include those with any characters other than letters,
-    digits, hyphens and underscores, those with empty labels, and names on
-    certificates with trailing dots.
+<!-- CL 231378, CL 231380, CL 231381 -->
+If either the name on the certificate or the name being verified (with
+[`VerifyOptions.DNSName`](/pkg/crypto/x509/#VerifyOptions.DNSName)
+or [`VerifyHostname`](/pkg/crypto/x509/#Certificate.VerifyHostname))
+are invalid, they will now be compared case-insensitively without further
+processing (without honoring wildcards or stripping trailing dots).
+Invalid names include those with any characters other than letters,
+digits, hyphens and underscores, those with empty labels, and names on
+certificates with trailing dots.
 
-    <!-- CL 217298 -->
-    The new [`CreateRevocationList`](/pkg/crypto/x509/#CreateRevocationList)
-    function and [`RevocationList`](/pkg/crypto/x509/#RevocationList) type
-    allow creating RFC 5280-compliant X.509 v2 Certificate Revocation Lists.
+<!-- CL 217298 -->
+The new [`CreateRevocationList`](/pkg/crypto/x509/#CreateRevocationList)
+function and [`RevocationList`](/pkg/crypto/x509/#RevocationList) type
+allow creating RFC 5280-compliant X.509 v2 Certificate Revocation Lists.
 
-    <!-- CL 227098 -->
-    [`CreateCertificate`](/pkg/crypto/x509/#CreateCertificate)
-    now automatically generates the `SubjectKeyId` if the template
-    is a CA and doesn't explicitly specify one.
+<!-- CL 227098 -->
+[`CreateCertificate`](/pkg/crypto/x509/#CreateCertificate)
+now automatically generates the `SubjectKeyId` if the template
+is a CA and doesn't explicitly specify one.
 
-    <!-- CL 228777 -->
-    [`CreateCertificate`](/pkg/crypto/x509/#CreateCertificate)
-    now returns an error if the template specifies `MaxPathLen` but is not a CA.
+<!-- CL 228777 -->
+[`CreateCertificate`](/pkg/crypto/x509/#CreateCertificate)
+now returns an error if the template specifies `MaxPathLen` but is not a CA.
 
-    <!-- CL 205237 -->
-    On Unix systems other than macOS, the `SSL_CERT_DIR`
-    environment variable can now be a colon-separated list.
+<!-- CL 205237 -->
+On Unix systems other than macOS, the `SSL_CERT_DIR`
+environment variable can now be a colon-separated list.
 
-    <!-- CL 227037 -->
-    On macOS, binaries are now always linked against
-    `Security.framework` to extract the system trust roots,
-    regardless of whether cgo is available. The resulting behavior should be
-    more consistent with the OS verifier.
+<!-- CL 227037 -->
+On macOS, binaries are now always linked against
+`Security.framework` to extract the system trust roots,
+regardless of whether cgo is available. The resulting behavior should be
+more consistent with the OS verifier.
 
 <!-- crypto/x509 -->
 
-[crypto/x509/pkix](/pkg/crypto/x509/pkix/)
+#### [crypto/x509/pkix](/pkg/crypto/x509/pkix/)
 
-:   <!-- CL 229864, CL 240543 -->
-    [`Name.String`](/pkg/crypto/x509/pkix/#Name.String)
-    now prints non-standard attributes from
-    [`Names`](/pkg/crypto/x509/pkix/#Name.Names) if
-    [`ExtraNames`](/pkg/crypto/x509/pkix/#Name.ExtraNames) is nil.
+<!-- CL 229864, CL 240543 -->
+[`Name.String`](/pkg/crypto/x509/pkix/#Name.String)
+now prints non-standard attributes from
+[`Names`](/pkg/crypto/x509/pkix/#Name.Names) if
+[`ExtraNames`](/pkg/crypto/x509/pkix/#Name.ExtraNames) is nil.
 
 <!-- crypto/x509/pkix -->
 
-[database/sql](/pkg/database/sql/)
+#### [database/sql](/pkg/database/sql/)
 
-:   <!-- CL 145758 -->
-    The new [`DB.SetConnMaxIdleTime`](/pkg/database/sql/#DB.SetConnMaxIdleTime)
-    method allows removing a connection from the connection pool after
-    it has been idle for a period of time, without regard to the total
-    lifespan of the connection. The [`DBStats.MaxIdleTimeClosed`](/pkg/database/sql/#DBStats.MaxIdleTimeClosed)
-    field shows the total number of connections closed due to
-    `DB.SetConnMaxIdleTime`.
+<!-- CL 145758 -->
+The new [`DB.SetConnMaxIdleTime`](/pkg/database/sql/#DB.SetConnMaxIdleTime)
+method allows removing a connection from the connection pool after
+it has been idle for a period of time, without regard to the total
+lifespan of the connection. The [`DBStats.MaxIdleTimeClosed`](/pkg/database/sql/#DBStats.MaxIdleTimeClosed)
+field shows the total number of connections closed due to
+`DB.SetConnMaxIdleTime`.
 
-    <!-- CL 214317 -->
-    The new [`Row.Err`](/pkg/database/sql/#Row.Err) getter
-    allows checking for query errors without calling
-    `Row.Scan`.
+<!-- CL 214317 -->
+The new [`Row.Err`](/pkg/database/sql/#Row.Err) getter
+allows checking for query errors without calling
+`Row.Scan`.
 
 <!-- database/sql -->
 
-[database/sql/driver](/pkg/database/sql/driver/)
+#### [database/sql/driver](/pkg/database/sql/driver/)
 
-:   <!-- CL 174122 -->
-    The new [`Validator`](/pkg/database/sql/driver/#Validator)
-    interface may be implemented by `Conn` to allow drivers
-    to signal if a connection is valid or if it should be discarded.
+<!-- CL 174122 -->
+The new [`Validator`](/pkg/database/sql/driver/#Validator)
+interface may be implemented by `Conn` to allow drivers
+to signal if a connection is valid or if it should be discarded.
 
 <!-- database/sql/driver -->
 
-[debug/pe](/pkg/debug/pe/)
+#### [debug/pe](/pkg/debug/pe/)
 
-:   <!-- CL 222637 -->
-    The package now defines the
-    `IMAGE_FILE`, `IMAGE_SUBSYSTEM`,
-    and `IMAGE_DLLCHARACTERISTICS` constants used by the
-    PE file format.
+<!-- CL 222637 -->
+The package now defines the
+`IMAGE_FILE`, `IMAGE_SUBSYSTEM`,
+and `IMAGE_DLLCHARACTERISTICS` constants used by the
+PE file format.
 
 <!-- debug/pe -->
 
-[encoding/asn1](/pkg/encoding/asn1/)
+#### [encoding/asn1](/pkg/encoding/asn1/)
 
-:   <!-- CL 226984 -->
-    [`Marshal`](/pkg/encoding/asn1/#Marshal) now sorts the components
-    of SET OF according to X.690 DER.
+<!-- CL 226984 -->
+[`Marshal`](/pkg/encoding/asn1/#Marshal) now sorts the components
+of SET OF according to X.690 DER.
 
-    <!-- CL 227320 -->
-    [`Unmarshal`](/pkg/encoding/asn1/#Unmarshal) now rejects tags and
-    Object Identifiers which are not minimally encoded according to X.690 DER.
+<!-- CL 227320 -->
+[`Unmarshal`](/pkg/encoding/asn1/#Unmarshal) now rejects tags and
+Object Identifiers which are not minimally encoded according to X.690 DER.
 
 <!-- encoding/asn1 -->
 
-[encoding/json](/pkg/encoding/json/)
+#### [encoding/json](/pkg/encoding/json/)
 
-:   <!-- CL 199837 -->
-    The package now has an internal limit to the maximum depth of
-    nesting when decoding. This reduces the possibility that a
-    deeply nested input could use large quantities of stack memory,
-    or even cause a "goroutine stack exceeds limit" panic.
+<!-- CL 199837 -->
+The package now has an internal limit to the maximum depth of
+nesting when decoding. This reduces the possibility that a
+deeply nested input could use large quantities of stack memory,
+or even cause a "goroutine stack exceeds limit" panic.
 
 <!-- encoding/json -->
 
-[flag](/pkg/flag/)
+#### [flag](/pkg/flag/)
 
-:   <!-- CL 221427 -->
-    When the `flag` package sees `-h` or `-help`,
-    and those flags are not defined, it now prints a usage message.
-    If the [`FlagSet`](/pkg/flag/#FlagSet) was created with
-    [`ExitOnError`](/pkg/flag/#ExitOnError),
-    [`FlagSet.Parse`](/pkg/flag/#FlagSet.Parse) would then
-    exit with a status of 2. In this release, the exit status for `-h`
-    or `-help` has been changed to 0. In particular, this applies to
-    the default handling of command line flags.
+<!-- CL 221427 -->
+When the `flag` package sees `-h` or `-help`,
+and those flags are not defined, it now prints a usage message.
+If the [`FlagSet`](/pkg/flag/#FlagSet) was created with
+[`ExitOnError`](/pkg/flag/#ExitOnError),
+[`FlagSet.Parse`](/pkg/flag/#FlagSet.Parse) would then
+exit with a status of 2. In this release, the exit status for `-h`
+or `-help` has been changed to 0. In particular, this applies to
+the default handling of command line flags.
 
-[fmt](/pkg/fmt/)
+#### [fmt](/pkg/fmt/)
 
-:   <!-- CL 215001 -->
-    The printing verbs `%#g` and `%#G` now preserve
-    trailing zeros for floating-point values.
+<!-- CL 215001 -->
+The printing verbs `%#g` and `%#G` now preserve
+trailing zeros for floating-point values.
 
 <!-- fmt -->
 
-[go/format](/pkg/go/format/)
+#### [go/format](/pkg/go/format/)
 
-:   <!-- golang.org/issue/37476, CL 231461, CL 240683 -->
-    The [`Source`](/pkg/go/format/#Source) and
-    [`Node`](/pkg/go/format/#Node) functions
-    now canonicalize number literal prefixes and exponents as part
-    of formatting Go source code. This matches the behavior of the
-    [`gofmt`](/pkg/cmd/gofmt/) command as it
-    was implemented [since Go 1.13](/doc/go1.13#gofmt).
+<!-- golang.org/issue/37476, CL 231461, CL 240683 -->
+The [`Source`](/pkg/go/format/#Source) and
+[`Node`](/pkg/go/format/#Node) functions
+now canonicalize number literal prefixes and exponents as part
+of formatting Go source code. This matches the behavior of the
+[`gofmt`](/pkg/cmd/gofmt/) command as it
+was implemented [since Go 1.13](/doc/go1.13#gofmt).
 
 <!-- go/format -->
 
-[html/template](/pkg/html/template/)
+#### [html/template](/pkg/html/template/)
 
-:   <!-- CL 226097 -->
-    The package now uses Unicode escapes (`\uNNNN`) in all
-    JavaScript and JSON contexts. This fixes escaping errors in
-    `application/ld+json` and `application/json`
-    contexts.
+<!-- CL 226097 -->
+The package now uses Unicode escapes (`\uNNNN`) in all
+JavaScript and JSON contexts. This fixes escaping errors in
+`application/ld+json` and `application/json`
+contexts.
 
 <!-- html/template -->
 
-[io/ioutil](/pkg/io/ioutil/)
+#### [io/ioutil](/pkg/io/ioutil/)
 
-:   <!-- CL 212597 -->
-    [`TempDir`](/pkg/io/ioutil/#TempDir) and
-    [`TempFile`](/pkg/io/ioutil/#TempFile)
-    now reject patterns that contain path separators.
-    That is, calls such as `ioutil.TempFile("/tmp",` `"../base*")` will no longer succeed.
-    This prevents unintended directory traversal.
+<!-- CL 212597 -->
+[`TempDir`](/pkg/io/ioutil/#TempDir) and
+[`TempFile`](/pkg/io/ioutil/#TempFile)
+now reject patterns that contain path separators.
+That is, calls such as `ioutil.TempFile("/tmp",` `"../base*")` will no longer succeed.
+This prevents unintended directory traversal.
 
 <!-- io/ioutil -->
 
-[math/big](/pkg/math/big/)
+#### [math/big](/pkg/math/big/)
 
-:   <!-- CL 230397 -->
-    The new [`Int.FillBytes`](/pkg/math/big/#Int.FillBytes)
-    method allows serializing to fixed-size pre-allocated byte slices.
+<!-- CL 230397 -->
+The new [`Int.FillBytes`](/pkg/math/big/#Int.FillBytes)
+method allows serializing to fixed-size pre-allocated byte slices.
 
 <!-- math/big -->
 
-[math/cmplx](/pkg/math/cmplx/)
+#### [math/cmplx](/pkg/math/cmplx/)
 
-:   <!-- CL 220689 -->
-    The functions in this package were updated to conform to the C99 standard
-    (Annex G IEC 60559-compatible complex arithmetic) with respect to handling
-    of special arguments such as infinity, NaN and signed zero.
+<!-- CL 220689 -->
+The functions in this package were updated to conform to the C99 standard
+(Annex G IEC 60559-compatible complex arithmetic) with respect to handling
+of special arguments such as infinity, NaN and signed zero.
 
 <!-- math/cmplx-->
 
-[net](/pkg/net/)
+#### [net](/pkg/net/)
 
-:   <!-- CL 228645 -->
-    If an I/O operation exceeds a deadline set by
-    the [`Conn.SetDeadline`](/pkg/net/#Conn),
-    `Conn.SetReadDeadline`,
-    or `Conn.SetWriteDeadline` methods, it will now
-    return an error that is or wraps
-    [`os.ErrDeadlineExceeded`](/pkg/os/#ErrDeadlineExceeded).
-    This may be used to reliably detect whether an error is due to
-    an exceeded deadline.
-    Earlier releases recommended calling the `Timeout`
-    method on the error, but I/O operations can return errors for
-    which `Timeout` returns `true` although a
-    deadline has not been exceeded.
+<!-- CL 228645 -->
+If an I/O operation exceeds a deadline set by
+the [`Conn.SetDeadline`](/pkg/net/#Conn),
+`Conn.SetReadDeadline`,
+or `Conn.SetWriteDeadline` methods, it will now
+return an error that is or wraps
+[`os.ErrDeadlineExceeded`](/pkg/os/#ErrDeadlineExceeded).
+This may be used to reliably detect whether an error is due to
+an exceeded deadline.
+Earlier releases recommended calling the `Timeout`
+method on the error, but I/O operations can return errors for
+which `Timeout` returns `true` although a
+deadline has not been exceeded.
 
-    <!-- CL 228641 -->
-    The new [`Resolver.LookupIP`](/pkg/net/#Resolver.LookupIP)
-    method supports IP lookups that are both network-specific and accept a context.
+<!-- CL 228641 -->
+The new [`Resolver.LookupIP`](/pkg/net/#Resolver.LookupIP)
+method supports IP lookups that are both network-specific and accept a context.
 
-[net/http](/pkg/net/http/)
+#### [net/http](/pkg/net/http/)
 
-:   <!-- CL 231418, CL 231419 -->
-    Parsing is now stricter as a hardening measure against request smuggling attacks:
-    non-ASCII white space is no longer trimmed like SP and HTAB, and support for the
-    "`identity`" `Transfer-Encoding` was dropped.
+<!-- CL 231418, CL 231419 -->
+Parsing is now stricter as a hardening measure against request smuggling attacks:
+non-ASCII white space is no longer trimmed like SP and HTAB, and support for the
+"`identity`" `Transfer-Encoding` was dropped.
 
 <!-- net/http -->
 
-[net/http/httputil](/pkg/net/http/httputil/)
+#### [net/http/httputil](/pkg/net/http/httputil/)
 
-:   <!-- CL 230937 -->
-    [`ReverseProxy`](/pkg/net/http/httputil/#ReverseProxy)
-    now supports not modifying the `X-Forwarded-For`
-    header when the incoming `Request.Header` map entry
-    for that field is `nil`.
+<!-- CL 230937 -->
+[`ReverseProxy`](/pkg/net/http/httputil/#ReverseProxy)
+now supports not modifying the `X-Forwarded-For`
+header when the incoming `Request.Header` map entry
+for that field is `nil`.
 
-    <!-- CL 224897 -->
-    When a Switching Protocol (like WebSocket) request handled by
-    [`ReverseProxy`](/pkg/net/http/httputil/#ReverseProxy)
-    is canceled, the backend connection is now correctly closed.
+<!-- CL 224897 -->
+When a Switching Protocol (like WebSocket) request handled by
+[`ReverseProxy`](/pkg/net/http/httputil/#ReverseProxy)
+is canceled, the backend connection is now correctly closed.
 
-[net/http/pprof](/pkg/net/http/pprof/)
+#### [net/http/pprof](/pkg/net/http/pprof/)
 
-:   <!-- CL 147598, CL 229537 -->
-    All profile endpoints now support a "`seconds`" parameter. When present,
-    the endpoint profiles for the specified number of seconds and reports the difference.
-    The meaning of the "`seconds`" parameter in the `cpu` profile and
-    the trace endpoints is unchanged.
+<!-- CL 147598, CL 229537 -->
+All profile endpoints now support a "`seconds`" parameter. When present,
+the endpoint profiles for the specified number of seconds and reports the difference.
+The meaning of the "`seconds`" parameter in the `cpu` profile and
+the trace endpoints is unchanged.
 
-[net/url](/pkg/net/url/)
+#### [net/url](/pkg/net/url/)
 
-:   <!-- CL 227645 -->
-    The new [`URL`](/pkg/net/url/#URL) field
-    `RawFragment` and method [`EscapedFragment`](/pkg/net/url/#URL.EscapedFragment)
-    provide detail about and control over the exact encoding of a particular fragment.
-    These are analogous to
-    `RawPath` and [`EscapedPath`](/pkg/net/url/#URL.EscapedPath).
+<!-- CL 227645 -->
+The new [`URL`](/pkg/net/url/#URL) field
+`RawFragment` and method [`EscapedFragment`](/pkg/net/url/#URL.EscapedFragment)
+provide detail about and control over the exact encoding of a particular fragment.
+These are analogous to
+`RawPath` and [`EscapedPath`](/pkg/net/url/#URL.EscapedPath).
 
-    <!-- CL 207082 -->
-    The new [`URL`](/pkg/net/url/#URL)
-    method [`Redacted`](/pkg/net/url/#URL.Redacted)
-    returns the URL in string form with any password replaced with `xxxxx`.
+<!-- CL 207082 -->
+The new [`URL`](/pkg/net/url/#URL)
+method [`Redacted`](/pkg/net/url/#URL.Redacted)
+returns the URL in string form with any password replaced with `xxxxx`.
 
-[os](/pkg/os/)
+#### [os](/pkg/os/)
 
-:   <!-- CL -->
-    If an I/O operation exceeds a deadline set by
-    the [`File.SetDeadline`](/pkg/os/#File.SetDeadline),
-    [`File.SetReadDeadline`](/pkg/os/#File.SetReadDeadline),
-    or [`File.SetWriteDeadline`](/pkg/os/#File.SetWriteDeadline)
-    methods, it will now return an error that is or wraps
-    [`os.ErrDeadlineExceeded`](/pkg/os/#ErrDeadlineExceeded).
-    This may be used to reliably detect whether an error is due to
-    an exceeded deadline.
-    Earlier releases recommended calling the `Timeout`
-    method on the error, but I/O operations can return errors for
-    which `Timeout` returns `true` although a
-    deadline has not been exceeded.
+<!-- CL -->
+If an I/O operation exceeds a deadline set by
+the [`File.SetDeadline`](/pkg/os/#File.SetDeadline),
+[`File.SetReadDeadline`](/pkg/os/#File.SetReadDeadline),
+or [`File.SetWriteDeadline`](/pkg/os/#File.SetWriteDeadline)
+methods, it will now return an error that is or wraps
+[`os.ErrDeadlineExceeded`](/pkg/os/#ErrDeadlineExceeded).
+This may be used to reliably detect whether an error is due to
+an exceeded deadline.
+Earlier releases recommended calling the `Timeout`
+method on the error, but I/O operations can return errors for
+which `Timeout` returns `true` although a
+deadline has not been exceeded.
 
-    <!-- CL 232862 -->
-    Packages `os` and `net` now automatically
-    retry system calls that fail with `EINTR`. Previously
-    this led to spurious failures, which became more common in Go
-    1.14 with the addition of asynchronous preemption. Now this is
-    handled transparently.
+<!-- CL 232862 -->
+Packages `os` and `net` now automatically
+retry system calls that fail with `EINTR`. Previously
+this led to spurious failures, which became more common in Go
+1.14 with the addition of asynchronous preemption. Now this is
+handled transparently.
 
-    <!-- CL 229101 -->
-    The [`os.File`](/pkg/os/#File) type now
-    supports a [`ReadFrom`](/pkg/os/#File.ReadFrom)
-    method. This permits the use of the `copy_file_range`
-    system call on some systems when using
-    [`io.Copy`](/pkg/io/#Copy) to copy data
-    from one `os.File` to another. A consequence is that
-    [`io.CopyBuffer`](/pkg/io/#CopyBuffer)
-    will not always use the provided buffer when copying to a
-    `os.File`. If a program wants to force the use of
-    the provided buffer, it can be done by writing
-    `io.CopyBuffer(struct{ io.Writer }{dst}, src, buf)`.
+<!-- CL 229101 -->
+The [`os.File`](/pkg/os/#File) type now
+supports a [`ReadFrom`](/pkg/os/#File.ReadFrom)
+method. This permits the use of the `copy_file_range`
+system call on some systems when using
+[`io.Copy`](/pkg/io/#Copy) to copy data
+from one `os.File` to another. A consequence is that
+[`io.CopyBuffer`](/pkg/io/#CopyBuffer)
+will not always use the provided buffer when copying to a
+`os.File`. If a program wants to force the use of
+the provided buffer, it can be done by writing
+`io.CopyBuffer(struct{ io.Writer }{dst}, src, buf)`.
 
-[plugin](/pkg/plugin/)
+#### [plugin](/pkg/plugin/)
 
-:   <!-- CL 182959 -->
-    DWARF generation is now supported (and enabled by default) for `-buildmode=plugin` on macOS.
+<!-- CL 182959 -->
+DWARF generation is now supported (and enabled by default) for `-buildmode=plugin` on macOS.
 
-    <!-- CL 191617 -->
-    Building with `-buildmode=plugin` is now supported on `freebsd/amd64`.
+<!-- CL 191617 -->
+Building with `-buildmode=plugin` is now supported on `freebsd/amd64`.
 
-[reflect](/pkg/reflect/)
+#### [reflect](/pkg/reflect/)
 
-:   <!-- CL 228902 -->
-    Package `reflect` now disallows accessing methods of all
-    non-exported fields, whereas previously it allowed accessing
-    those of non-exported, embedded fields. Code that relies on the
-    previous behavior should be updated to instead access the
-    corresponding promoted method of the enclosing variable.
+<!-- CL 228902 -->
+Package `reflect` now disallows accessing methods of all
+non-exported fields, whereas previously it allowed accessing
+those of non-exported, embedded fields. Code that relies on the
+previous behavior should be updated to instead access the
+corresponding promoted method of the enclosing variable.
 
-[regexp](/pkg/regexp/)
+#### [regexp](/pkg/regexp/)
 
-:   <!-- CL 187919 -->
-    The new [`Regexp.SubexpIndex`](/pkg/regexp/#Regexp.SubexpIndex)
-    method returns the index of the first subexpression with the given name
-    within the regular expression.
+<!-- CL 187919 -->
+The new [`Regexp.SubexpIndex`](/pkg/regexp/#Regexp.SubexpIndex)
+method returns the index of the first subexpression with the given name
+within the regular expression.
 
 <!-- regexp -->
 
-[runtime](/pkg/runtime/)
+#### [runtime](/pkg/runtime/)
 
-:   <!-- CL 216557 -->
-    Several functions, including
-    [`ReadMemStats`](/pkg/runtime/#ReadMemStats)
-    and
-    [`GoroutineProfile`](/pkg/runtime/#GoroutineProfile),
-    no longer block if a garbage collection is in progress.
+<!-- CL 216557 -->
+Several functions, including
+[`ReadMemStats`](/pkg/runtime/#ReadMemStats)
+and
+[`GoroutineProfile`](/pkg/runtime/#GoroutineProfile),
+no longer block if a garbage collection is in progress.
 
-[runtime/pprof](/pkg/runtime/pprof/)
+#### [runtime/pprof](/pkg/runtime/pprof/)
 
-:   <!-- CL 189318 -->
-    The goroutine profile now includes the profile labels associated with each
-    goroutine at the time of profiling. This feature is not yet implemented for
-    the profile reported with `debug=2`.
+<!-- CL 189318 -->
+The goroutine profile now includes the profile labels associated with each
+goroutine at the time of profiling. This feature is not yet implemented for
+the profile reported with `debug=2`.
 
-[strconv](/pkg/strconv/)
+#### [strconv](/pkg/strconv/)
 
-:   <!-- CL 216617 -->
-    [`FormatComplex`](/pkg/strconv/#FormatComplex) and [`ParseComplex`](/pkg/strconv/#ParseComplex) are added for working with complex numbers.
+<!-- CL 216617 -->
+[`FormatComplex`](/pkg/strconv/#FormatComplex) and [`ParseComplex`](/pkg/strconv/#ParseComplex) are added for working with complex numbers.
 
-    [`FormatComplex`](/pkg/strconv/#FormatComplex) converts a complex number into a string of the form (a+bi), where a and b are the real and imaginary parts.
+[`FormatComplex`](/pkg/strconv/#FormatComplex) converts a complex number into a string of the form (a+bi), where a and b are the real and imaginary parts.
 
-    [`ParseComplex`](/pkg/strconv/#ParseComplex) converts a string into a complex number of a specified precision. `ParseComplex` accepts complex numbers in the format `N+Ni`.
+[`ParseComplex`](/pkg/strconv/#ParseComplex) converts a string into a complex number of a specified precision. `ParseComplex` accepts complex numbers in the format `N+Ni`.
 
 <!-- strconv -->
 
-[sync](/pkg/sync/)
+#### [sync](/pkg/sync/)
 
-:   <!-- CL 205899, golang.org/issue/33762 -->
-    The new method
-    [`Map.LoadAndDelete`](/pkg/sync/#Map.LoadAndDelete)
-    atomically deletes a key and returns the previous value if present.
+<!-- CL 205899, golang.org/issue/33762 -->
+The new method
+[`Map.LoadAndDelete`](/pkg/sync/#Map.LoadAndDelete)
+atomically deletes a key and returns the previous value if present.
 
-    <!-- CL 205899 -->
-    The method
-    [`Map.Delete`](/pkg/sync/#Map.Delete)
-    is more efficient.
+<!-- CL 205899 -->
+The method
+[`Map.Delete`](/pkg/sync/#Map.Delete)
+is more efficient.
 
 <!-- sync -->
 
-[syscall](/pkg/syscall/)
+#### [syscall](/pkg/syscall/)
 
-:   <!-- CL 231638 -->
-    On Unix systems, functions that use
-    [`SysProcAttr`](/pkg/syscall/#SysProcAttr)
-    will now reject attempts to set both the `Setctty`
-    and `Foreground` fields, as they both use
-    the `Ctty` field but do so in incompatible ways.
-    We expect that few existing programs set both fields.
+<!-- CL 231638 -->
+On Unix systems, functions that use
+[`SysProcAttr`](/pkg/syscall/#SysProcAttr)
+will now reject attempts to set both the `Setctty`
+and `Foreground` fields, as they both use
+the `Ctty` field but do so in incompatible ways.
+We expect that few existing programs set both fields.
 
-    Setting the `Setctty` field now requires that the
-    `Ctty` field be set to a file descriptor number in the
-    child process, as determined by the `ProcAttr.Files` field.
-    Using a child descriptor always worked, but there were certain
-    cases where using a parent file descriptor also happened to work.
-    Some programs that set `Setctty` will need to change
-    the value of `Ctty` to use a child descriptor number.
+Setting the `Setctty` field now requires that the
+`Ctty` field be set to a file descriptor number in the
+child process, as determined by the `ProcAttr.Files` field.
+Using a child descriptor always worked, but there were certain
+cases where using a parent file descriptor also happened to work.
+Some programs that set `Setctty` will need to change
+the value of `Ctty` to use a child descriptor number.
 
-    <!-- CL 220578 -->
-    It is [now possible](/pkg/syscall/#Proc.Call) to call
-    system calls that return floating point values
-    on `windows/amd64`.
+<!-- CL 220578 -->
+It is [now possible](/pkg/syscall/#Proc.Call) to call
+system calls that return floating point values
+on `windows/amd64`.
 
-[testing](/pkg/testing/)
+#### [testing](/pkg/testing/)
 
-:   <!-- golang.org/issue/28135 -->
-    The `testing.T` type now has a
-    [`Deadline`](/pkg/testing/#T.Deadline) method
-    that reports the time at which the test binary will have exceeded its
-    timeout.
+<!-- golang.org/issue/28135 -->
+The `testing.T` type now has a
+[`Deadline`](/pkg/testing/#T.Deadline) method
+that reports the time at which the test binary will have exceeded its
+timeout.
 
-    <!-- golang.org/issue/34129 -->
-    A `TestMain` function is no longer required to call
-    `os.Exit`. If a `TestMain` function returns,
-    the test binary will call `os.Exit` with the value returned
-    by `m.Run`.
+<!-- golang.org/issue/34129 -->
+A `TestMain` function is no longer required to call
+`os.Exit`. If a `TestMain` function returns,
+the test binary will call `os.Exit` with the value returned
+by `m.Run`.
 
-    <!-- CL 226877, golang.org/issue/35998 -->
-    The new methods
-    [`T.TempDir`](/pkg/testing/#T.TempDir) and
-    [`B.TempDir`](/pkg/testing/#B.TempDir)
-    return temporary directories that are automatically cleaned up
-    at the end of the test.
+<!-- CL 226877, golang.org/issue/35998 -->
+The new methods
+[`T.TempDir`](/pkg/testing/#T.TempDir) and
+[`B.TempDir`](/pkg/testing/#B.TempDir)
+return temporary directories that are automatically cleaned up
+at the end of the test.
 
-    <!-- CL 229085 -->
-    `go` `test` `-v` now groups output by
-    test name, rather than printing the test name on each line.
+<!-- CL 229085 -->
+`go` `test` `-v` now groups output by
+test name, rather than printing the test name on each line.
 
 <!-- testing -->
 
-[text/template](/pkg/text/template/)
+#### [text/template](/pkg/text/template/)
 
-:   <!-- CL 226097 -->
-    [`JSEscape`](/pkg/text/template/#JSEscape) now
-    consistently uses Unicode escapes (`\u00XX`), which are
-    compatible with JSON.
+<!-- CL 226097 -->
+[`JSEscape`](/pkg/text/template/#JSEscape) now
+consistently uses Unicode escapes (`\u00XX`), which are
+compatible with JSON.
 
 <!-- text/template -->
 
-[time](/pkg/time/)
+#### [time](/pkg/time/)
 
-:   <!-- CL 220424, CL 217362, golang.org/issue/33184 -->
-    The new method
-    [`Ticker.Reset`](/pkg/time/#Ticker.Reset)
-    supports changing the duration of a ticker.
+<!-- CL 220424, CL 217362, golang.org/issue/33184 -->
+The new method
+[`Ticker.Reset`](/pkg/time/#Ticker.Reset)
+supports changing the duration of a ticker.
 
-    <!-- CL 227878 -->
-    When returning an error, [`ParseDuration`](/pkg/time/#ParseDuration) now quotes the original value.
+<!-- CL 227878 -->
+When returning an error, [`ParseDuration`](/pkg/time/#ParseDuration) now quotes the original value.
 
 <!-- time -->
diff --git a/_content/doc/go1.16.md b/_content/doc/go1.16.md
index 74e33b4..2779e0a 100644
--- a/_content/doc/go1.16.md
+++ b/_content/doc/go1.16.md
@@ -505,586 +505,586 @@
 made with the Go 1 [promise of compatibility](/doc/go1compat)
 in mind.
 
-[archive/zip](/pkg/archive/zip/)
+#### [archive/zip](/pkg/archive/zip/)
 
-:   <!-- CL 243937 -->
-    The new [`Reader.Open`](/pkg/archive/zip/#Reader.Open)
-    method implements the [`fs.FS`](/pkg/io/fs/#FS)
-    interface.
+<!-- CL 243937 -->
+The new [`Reader.Open`](/pkg/archive/zip/#Reader.Open)
+method implements the [`fs.FS`](/pkg/io/fs/#FS)
+interface.
 
-[crypto/dsa](/pkg/crypto/dsa/)
+#### [crypto/dsa](/pkg/crypto/dsa/)
 
-:   <!-- CL 257939 -->
-    The [`crypto/dsa`](/pkg/crypto/dsa/) package is now deprecated.
-    See [issue #40337](/issue/40337).
+<!-- CL 257939 -->
+The [`crypto/dsa`](/pkg/crypto/dsa/) package is now deprecated.
+See [issue #40337](/issue/40337).
 
 <!-- crypto/dsa -->
 
-[crypto/hmac](/pkg/crypto/hmac/)
+#### [crypto/hmac](/pkg/crypto/hmac/)
 
-:   <!-- CL 261960 -->
-    [`New`](/pkg/crypto/hmac/#New) will now panic if
-    separate calls to the hash generation function fail to return new values.
-    Previously, the behavior was undefined and invalid outputs were sometimes
-    generated.
+<!-- CL 261960 -->
+[`New`](/pkg/crypto/hmac/#New) will now panic if
+separate calls to the hash generation function fail to return new values.
+Previously, the behavior was undefined and invalid outputs were sometimes
+generated.
 
 <!-- crypto/hmac -->
 
-[crypto/tls](/pkg/crypto/tls/)
+#### [crypto/tls](/pkg/crypto/tls/)
 
-:   <!-- CL 256897 -->
-    I/O operations on closing or closed TLS connections can now be detected
-    using the new [`net.ErrClosed`](/pkg/net/#ErrClosed)
-    error. A typical use would be `errors.Is(err, net.ErrClosed)`.
+<!-- CL 256897 -->
+I/O operations on closing or closed TLS connections can now be detected
+using the new [`net.ErrClosed`](/pkg/net/#ErrClosed)
+error. A typical use would be `errors.Is(err, net.ErrClosed)`.
 
-    <!-- CL 266037 -->
-    A default write deadline is now set in
-    [`Conn.Close`](/pkg/crypto/tls/#Conn.Close)
-    before sending the "close notify" alert, in order to prevent blocking
-    indefinitely.
+<!-- CL 266037 -->
+A default write deadline is now set in
+[`Conn.Close`](/pkg/crypto/tls/#Conn.Close)
+before sending the "close notify" alert, in order to prevent blocking
+indefinitely.
 
-    <!-- CL 239748 -->
-    Clients now return a handshake error if the server selects
-    [
-    an ALPN protocol](/pkg/crypto/tls/#ConnectionState.NegotiatedProtocol) that was not in
-    [
-    the list advertised by the client](/pkg/crypto/tls/#Config.NextProtos).
+<!-- CL 239748 -->
+Clients now return a handshake error if the server selects
+[
+an ALPN protocol](/pkg/crypto/tls/#ConnectionState.NegotiatedProtocol) that was not in
+[
+the list advertised by the client](/pkg/crypto/tls/#Config.NextProtos).
 
-    <!-- CL 262857 -->
-    Servers will now prefer other available AEAD cipher suites (such as ChaCha20Poly1305)
-    over AES-GCM cipher suites if either the client or server doesn't have AES hardware
-    support, unless both [
-    `Config.PreferServerCipherSuites`](/pkg/crypto/tls/#Config.PreferServerCipherSuites)
-    and [`Config.CipherSuites`](/pkg/crypto/tls/#Config.CipherSuites)
-    are set. The client is assumed not to have AES hardware support if it does
-    not signal a preference for AES-GCM cipher suites.
+<!-- CL 262857 -->
+Servers will now prefer other available AEAD cipher suites (such as ChaCha20Poly1305)
+over AES-GCM cipher suites if either the client or server doesn't have AES hardware
+support, unless both [
+`Config.PreferServerCipherSuites`](/pkg/crypto/tls/#Config.PreferServerCipherSuites)
+and [`Config.CipherSuites`](/pkg/crypto/tls/#Config.CipherSuites)
+are set. The client is assumed not to have AES hardware support if it does
+not signal a preference for AES-GCM cipher suites.
 
-    <!-- CL 246637 -->
-    [`Config.Clone`](/pkg/crypto/tls/#Config.Clone) now
-    returns nil if the receiver is nil, rather than panicking.
+<!-- CL 246637 -->
+[`Config.Clone`](/pkg/crypto/tls/#Config.Clone) now
+returns nil if the receiver is nil, rather than panicking.
 
 <!-- crypto/tls -->
 
-[crypto/x509](/pkg/crypto/x509/)
+#### [crypto/x509](/pkg/crypto/x509/)
 
-:   The `GODEBUG=x509ignoreCN=0` flag will be removed in Go 1.17.
-    It enables the legacy behavior of treating the `CommonName`
-    field on X.509 certificates as a host name when no Subject Alternative
-    Names are present.
+The `GODEBUG=x509ignoreCN=0` flag will be removed in Go 1.17.
+It enables the legacy behavior of treating the `CommonName`
+field on X.509 certificates as a host name when no Subject Alternative
+Names are present.
 
-    <!-- CL 235078 -->
-    [`ParseCertificate`](/pkg/crypto/x509/#ParseCertificate) and
-    [`CreateCertificate`](/pkg/crypto/x509/#CreateCertificate)
-    now enforce string encoding restrictions for the `DNSNames`,
-    `EmailAddresses`, and `URIs` fields. These fields
-    can only contain strings with characters within the ASCII range.
+<!-- CL 235078 -->
+[`ParseCertificate`](/pkg/crypto/x509/#ParseCertificate) and
+[`CreateCertificate`](/pkg/crypto/x509/#CreateCertificate)
+now enforce string encoding restrictions for the `DNSNames`,
+`EmailAddresses`, and `URIs` fields. These fields
+can only contain strings with characters within the ASCII range.
 
-    <!-- CL 259697 -->
-    [`CreateCertificate`](/pkg/crypto/x509/#CreateCertificate)
-    now verifies the generated certificate's signature using the signer's
-    public key. If the signature is invalid, an error is returned, instead of
-    a malformed certificate.
+<!-- CL 259697 -->
+[`CreateCertificate`](/pkg/crypto/x509/#CreateCertificate)
+now verifies the generated certificate's signature using the signer's
+public key. If the signature is invalid, an error is returned, instead of
+a malformed certificate.
 
-    <!-- CL 257939 -->
-    DSA signature verification is no longer supported. Note that DSA signature
-    generation was never supported.
-    See [issue #40337](/issue/40337).
+<!-- CL 257939 -->
+DSA signature verification is no longer supported. Note that DSA signature
+generation was never supported.
+See [issue #40337](/issue/40337).
 
-    <!-- CL 257257 -->
-    On Windows, [`Certificate.Verify`](/pkg/crypto/x509/#Certificate.Verify)
-    will now return all certificate chains that are built by the platform
-    certificate verifier, instead of just the highest ranked chain.
+<!-- CL 257257 -->
+On Windows, [`Certificate.Verify`](/pkg/crypto/x509/#Certificate.Verify)
+will now return all certificate chains that are built by the platform
+certificate verifier, instead of just the highest ranked chain.
 
-    <!-- CL 262343 -->
-    The new [`SystemRootsError.Unwrap`](/pkg/crypto/x509/#SystemRootsError.Unwrap)
-    method allows accessing the [`Err`](/pkg/crypto/x509/#SystemRootsError.Err)
-    field through the [`errors`](/pkg/errors) package functions.
+<!-- CL 262343 -->
+The new [`SystemRootsError.Unwrap`](/pkg/crypto/x509/#SystemRootsError.Unwrap)
+method allows accessing the [`Err`](/pkg/crypto/x509/#SystemRootsError.Err)
+field through the [`errors`](/pkg/errors) package functions.
 
-    <!-- CL 230025 -->
-    On Unix systems, the `crypto/x509` package is now more
-    efficient in how it stores its copy of the system cert pool.
-    Programs that use only a small number of roots will use around a
-    half megabyte less memory.
+<!-- CL 230025 -->
+On Unix systems, the `crypto/x509` package is now more
+efficient in how it stores its copy of the system cert pool.
+Programs that use only a small number of roots will use around a
+half megabyte less memory.
 
 <!-- crypto/x509 -->
 
-[debug/elf](/pkg/debug/elf/)
+#### [debug/elf](/pkg/debug/elf/)
 
-:   <!-- CL 255138 -->
-    More [`DT`](/pkg/debug/elf/#DT_NULL)
-    and [`PT`](/pkg/debug/elf/#PT_NULL)
-    constants have been added.
+<!-- CL 255138 -->
+More [`DT`](/pkg/debug/elf/#DT_NULL)
+and [`PT`](/pkg/debug/elf/#PT_NULL)
+constants have been added.
 
 <!-- debug/elf -->
 
-[encoding/asn1](/pkg/encoding/asn1)
+#### [encoding/asn1](/pkg/encoding/asn1)
 
-:   <!-- CL 255881 -->
-    [`Unmarshal`](/pkg/encoding/asn1/#Unmarshal) and
-    [`UnmarshalWithParams`](/pkg/encoding/asn1/#UnmarshalWithParams)
-    now return an error instead of panicking when the argument is not
-    a pointer or is nil. This change matches the behavior of other
-    encoding packages such as [`encoding/json`](/pkg/encoding/json).
+<!-- CL 255881 -->
+[`Unmarshal`](/pkg/encoding/asn1/#Unmarshal) and
+[`UnmarshalWithParams`](/pkg/encoding/asn1/#UnmarshalWithParams)
+now return an error instead of panicking when the argument is not
+a pointer or is nil. This change matches the behavior of other
+encoding packages such as [`encoding/json`](/pkg/encoding/json).
 
-[encoding/json](/pkg/encoding/json/)
+#### [encoding/json](/pkg/encoding/json/)
 
-:   <!-- CL 234818 -->
-    The `json` struct field tags understood by
-    [`Marshal`](/pkg/encoding/json/#Marshal),
-    [`Unmarshal`](/pkg/encoding/json/#Unmarshal),
-    and related functionality now permit semicolon characters within
-    a JSON object name for a Go struct field.
+<!-- CL 234818 -->
+The `json` struct field tags understood by
+[`Marshal`](/pkg/encoding/json/#Marshal),
+[`Unmarshal`](/pkg/encoding/json/#Unmarshal),
+and related functionality now permit semicolon characters within
+a JSON object name for a Go struct field.
 
 <!-- encoding/json -->
 
-[encoding/xml](/pkg/encoding/xml/)
+#### [encoding/xml](/pkg/encoding/xml/)
 
-:   <!-- CL 264024 -->
-    The encoder has always taken care to avoid using namespace prefixes
-    beginning with `xml`, which are reserved by the XML
-    specification.
-    Now, following the specification more closely, that check is
-    case-insensitive, so that prefixes beginning
-    with `XML`, `XmL`, and so on are also
-    avoided.
+<!-- CL 264024 -->
+The encoder has always taken care to avoid using namespace prefixes
+beginning with `xml`, which are reserved by the XML
+specification.
+Now, following the specification more closely, that check is
+case-insensitive, so that prefixes beginning
+with `XML`, `XmL`, and so on are also
+avoided.
 
 <!-- encoding/xml -->
 
-[flag](/pkg/flag/)
+#### [flag](/pkg/flag/)
 
-:   <!-- CL 240014 -->
-    The new [`Func`](/pkg/flag/#Func) function
-    allows registering a flag implemented by calling a function,
-    as a lighter-weight alternative to implementing the
-    [`Value`](/pkg/flag/#Value) interface.
+<!-- CL 240014 -->
+The new [`Func`](/pkg/flag/#Func) function
+allows registering a flag implemented by calling a function,
+as a lighter-weight alternative to implementing the
+[`Value`](/pkg/flag/#Value) interface.
 
 <!-- flag -->
 
-[go/build](/pkg/go/build/)
+#### [go/build](/pkg/go/build/)
 
-:   <!-- CL 243941, CL 283636 -->
-    The [`Package`](/pkg/go/build/#Package)
-    struct has new fields that report information
-    about `//go:embed` directives in the package:
-    [`EmbedPatterns`](/pkg/go/build/#Package.EmbedPatterns),
-    [`EmbedPatternPos`](/pkg/go/build/#Package.EmbedPatternPos),
-    [`TestEmbedPatterns`](/pkg/go/build/#Package.TestEmbedPatterns),
-    [`TestEmbedPatternPos`](/pkg/go/build/#Package.TestEmbedPatternPos),
-    [`XTestEmbedPatterns`](/pkg/go/build/#Package.XTestEmbedPatterns),
-    [`XTestEmbedPatternPos`](/pkg/go/build/#Package.XTestEmbedPatternPos).
+<!-- CL 243941, CL 283636 -->
+The [`Package`](/pkg/go/build/#Package)
+struct has new fields that report information
+about `//go:embed` directives in the package:
+[`EmbedPatterns`](/pkg/go/build/#Package.EmbedPatterns),
+[`EmbedPatternPos`](/pkg/go/build/#Package.EmbedPatternPos),
+[`TestEmbedPatterns`](/pkg/go/build/#Package.TestEmbedPatterns),
+[`TestEmbedPatternPos`](/pkg/go/build/#Package.TestEmbedPatternPos),
+[`XTestEmbedPatterns`](/pkg/go/build/#Package.XTestEmbedPatterns),
+[`XTestEmbedPatternPos`](/pkg/go/build/#Package.XTestEmbedPatternPos).
 
-    <!-- CL 240551 -->
-    The [`Package`](/pkg/go/build/#Package) field
-    [`IgnoredGoFiles`](/pkg/go/build/#Package.IgnoredGoFiles)
-    will no longer include files that start with "\_" or ".",
-    as those files are always ignored.
-    `IgnoredGoFiles` is for files ignored because of
-    build constraints.
+<!-- CL 240551 -->
+The [`Package`](/pkg/go/build/#Package) field
+[`IgnoredGoFiles`](/pkg/go/build/#Package.IgnoredGoFiles)
+will no longer include files that start with "\_" or ".",
+as those files are always ignored.
+`IgnoredGoFiles` is for files ignored because of
+build constraints.
 
-    <!-- CL 240551 -->
-    The new [`Package`](/pkg/go/build/#Package)
-    field [`IgnoredOtherFiles`](/pkg/go/build/#Package.IgnoredOtherFiles)
-    has a list of non-Go files ignored because of build constraints.
+<!-- CL 240551 -->
+The new [`Package`](/pkg/go/build/#Package)
+field [`IgnoredOtherFiles`](/pkg/go/build/#Package.IgnoredOtherFiles)
+has a list of non-Go files ignored because of build constraints.
 
 <!-- go/build -->
 
-[go/build/constraint](/pkg/go/build/constraint/)
+#### [go/build/constraint](/pkg/go/build/constraint/)
 
-:   <!-- CL 240604 -->
-    The new
-    [`go/build/constraint`](/pkg/go/build/constraint/)
-    package parses build constraint lines, both the original
-    `// +build` syntax and the `//go:build`
-    syntax that will be introduced in Go 1.17.
-    This package exists so that tools built with Go 1.16 will be able
-    to process Go 1.17 source code.
-    See [https://golang.org/design/draft-gobuild](/design/draft-gobuild)
-    for details about the build constraint syntaxes and the planned
-    transition to the `//go:build` syntax.
-    Note that `//go:build` lines are **not** supported
-    in Go 1.16 and should not be introduced into Go programs yet.
+<!-- CL 240604 -->
+The new
+[`go/build/constraint`](/pkg/go/build/constraint/)
+package parses build constraint lines, both the original
+`// +build` syntax and the `//go:build`
+syntax that will be introduced in Go 1.17.
+This package exists so that tools built with Go 1.16 will be able
+to process Go 1.17 source code.
+See [https://golang.org/design/draft-gobuild](/design/draft-gobuild)
+for details about the build constraint syntaxes and the planned
+transition to the `//go:build` syntax.
+Note that `//go:build` lines are **not** supported
+in Go 1.16 and should not be introduced into Go programs yet.
 
 <!-- go/build/constraint -->
 
-[html/template](/pkg/html/template/)
+#### [html/template](/pkg/html/template/)
 
-:   <!-- CL 243938 -->
-    The new [`template.ParseFS`](/pkg/html/template/#ParseFS)
-    function and [`template.Template.ParseFS`](/pkg/html/template/#Template.ParseFS)
-    method are like [`template.ParseGlob`](/pkg/html/template/#ParseGlob)
-    and [`template.Template.ParseGlob`](/pkg/html/template/#Template.ParseGlob),
-    but read the templates from an [`fs.FS`](/pkg/io/fs/#FS).
+<!-- CL 243938 -->
+The new [`template.ParseFS`](/pkg/html/template/#ParseFS)
+function and [`template.Template.ParseFS`](/pkg/html/template/#Template.ParseFS)
+method are like [`template.ParseGlob`](/pkg/html/template/#ParseGlob)
+and [`template.Template.ParseGlob`](/pkg/html/template/#Template.ParseGlob),
+but read the templates from an [`fs.FS`](/pkg/io/fs/#FS).
 
 <!-- html/template -->
 
-[io](/pkg/io/)
+#### [io](/pkg/io/)
 
-:   <!-- CL 261577 -->
-    The package now defines a
-    [`ReadSeekCloser`](/pkg/io/#ReadSeekCloser) interface.
+<!-- CL 261577 -->
+The package now defines a
+[`ReadSeekCloser`](/pkg/io/#ReadSeekCloser) interface.
 
-    <!-- CL 263141 -->
-    The package now defines
-    [`Discard`](/pkg/io/#Discard),
-    [`NopCloser`](/pkg/io/#NopCloser), and
-    [`ReadAll`](/pkg/io/#ReadAll),
-    to be used instead of the same names in the
-    [`io/ioutil`](/pkg/io/ioutil/) package.
+<!-- CL 263141 -->
+The package now defines
+[`Discard`](/pkg/io/#Discard),
+[`NopCloser`](/pkg/io/#NopCloser), and
+[`ReadAll`](/pkg/io/#ReadAll),
+to be used instead of the same names in the
+[`io/ioutil`](/pkg/io/ioutil/) package.
 
 <!-- io -->
 
-[log](/pkg/log/)
+#### [log](/pkg/log/)
 
-:   <!-- CL 264460 -->
-    The new [`Default`](/pkg/log/#Default) function
-    provides access to the default [`Logger`](/pkg/log/#Logger).
+<!-- CL 264460 -->
+The new [`Default`](/pkg/log/#Default) function
+provides access to the default [`Logger`](/pkg/log/#Logger).
 
 <!-- log -->
 
-[log/syslog](/pkg/log/syslog/)
+#### [log/syslog](/pkg/log/syslog/)
 
-:   <!-- CL 264297 -->
-    The [`Writer`](/pkg/log/syslog/#Writer)
-    now uses the local message format
-    (omitting the host name and using a shorter time stamp)
-    when logging to custom Unix domain sockets,
-    matching the format already used for the default log socket.
+<!-- CL 264297 -->
+The [`Writer`](/pkg/log/syslog/#Writer)
+now uses the local message format
+(omitting the host name and using a shorter time stamp)
+when logging to custom Unix domain sockets,
+matching the format already used for the default log socket.
 
 <!-- log/syslog -->
 
-[mime/multipart](/pkg/mime/multipart/)
+#### [mime/multipart](/pkg/mime/multipart/)
 
-:   <!-- CL 247477 -->
-    The [`Reader`](/pkg/mime/multipart/#Reader)'s
-    [`ReadForm`](/pkg/mime/multipart/#Reader.ReadForm)
-    method no longer rejects form data
-    when passed the maximum int64 value as a limit.
+<!-- CL 247477 -->
+The [`Reader`](/pkg/mime/multipart/#Reader)'s
+[`ReadForm`](/pkg/mime/multipart/#Reader.ReadForm)
+method no longer rejects form data
+when passed the maximum int64 value as a limit.
 
 <!-- mime/multipart -->
 
-[net](/pkg/net/)
+#### [net](/pkg/net/)
 
-:   <!-- CL 250357 -->
-    The case of I/O on a closed network connection, or I/O on a network
-    connection that is closed before any of the I/O completes, can now
-    be detected using the new [`ErrClosed`](/pkg/net/#ErrClosed)
-    error. A typical use would be `errors.Is(err, net.ErrClosed)`.
-    In earlier releases the only way to reliably detect this case was to
-    match the string returned by the `Error` method
-    with `"use of closed network connection"`.
+<!-- CL 250357 -->
+The case of I/O on a closed network connection, or I/O on a network
+connection that is closed before any of the I/O completes, can now
+be detected using the new [`ErrClosed`](/pkg/net/#ErrClosed)
+error. A typical use would be `errors.Is(err, net.ErrClosed)`.
+In earlier releases the only way to reliably detect this case was to
+match the string returned by the `Error` method
+with `"use of closed network connection"`.
 
-    <!-- CL 255898 -->
-    In previous Go releases the default TCP listener backlog size on Linux systems,
-    set by `/proc/sys/net/core/somaxconn`, was limited to a maximum of `65535`.
-    On Linux kernel version 4.1 and above, the maximum is now `4294967295`.
+<!-- CL 255898 -->
+In previous Go releases the default TCP listener backlog size on Linux systems,
+set by `/proc/sys/net/core/somaxconn`, was limited to a maximum of `65535`.
+On Linux kernel version 4.1 and above, the maximum is now `4294967295`.
 
-    <!-- CL 238629 -->
-    On Linux, host name lookups no longer use DNS before checking
-    `/etc/hosts` when `/etc/nsswitch.conf`
-    is missing; this is common on musl-based systems and makes
-    Go programs match the behavior of C programs on those systems.
+<!-- CL 238629 -->
+On Linux, host name lookups no longer use DNS before checking
+`/etc/hosts` when `/etc/nsswitch.conf`
+is missing; this is common on musl-based systems and makes
+Go programs match the behavior of C programs on those systems.
 
 <!-- net -->
 
-[net/http](/pkg/net/http/)
+#### [net/http](/pkg/net/http/)
 
-:   <!-- CL 233637 -->
-    In the [`net/http`](/pkg/net/http/) package, the
-    behavior of [`StripPrefix`](/pkg/net/http/#StripPrefix)
-    has been changed to strip the prefix from the request URL's
-    `RawPath` field in addition to its `Path` field.
-    In past releases, only the `Path` field was trimmed, and so if the
-    request URL contained any escaped characters the URL would be modified to
-    have mismatched `Path` and `RawPath` fields.
-    In Go 1.16, `StripPrefix` trims both fields.
-    If there are escaped characters in the prefix part of the request URL the
-    handler serves a 404 instead of its previous behavior of invoking the
-    underlying handler with a mismatched `Path`/`RawPath` pair.
+<!-- CL 233637 -->
+In the [`net/http`](/pkg/net/http/) package, the
+behavior of [`StripPrefix`](/pkg/net/http/#StripPrefix)
+has been changed to strip the prefix from the request URL's
+`RawPath` field in addition to its `Path` field.
+In past releases, only the `Path` field was trimmed, and so if the
+request URL contained any escaped characters the URL would be modified to
+have mismatched `Path` and `RawPath` fields.
+In Go 1.16, `StripPrefix` trims both fields.
+If there are escaped characters in the prefix part of the request URL the
+handler serves a 404 instead of its previous behavior of invoking the
+underlying handler with a mismatched `Path`/`RawPath` pair.
 
-    <!-- CL 252497 -->
-    The [`net/http`](/pkg/net/http/) package now rejects HTTP range requests
-    of the form `"Range": "bytes=--N"` where `"-N"` is a negative suffix length, for
-    example `"Range": "bytes=--2"`. It now replies with a `416 "Range Not Satisfiable"` response.
+<!-- CL 252497 -->
+The [`net/http`](/pkg/net/http/) package now rejects HTTP range requests
+of the form `"Range": "bytes=--N"` where `"-N"` is a negative suffix length, for
+example `"Range": "bytes=--2"`. It now replies with a `416 "Range Not Satisfiable"` response.
 
-    <!-- CL 256498, golang.org/issue/36990 -->
-    Cookies set with [`SameSiteDefaultMode`](/pkg/net/http/#SameSiteDefaultMode)
-    now behave according to the current spec (no attribute is set) instead of
-    generating a SameSite key without a value.
+<!-- CL 256498, golang.org/issue/36990 -->
+Cookies set with [`SameSiteDefaultMode`](/pkg/net/http/#SameSiteDefaultMode)
+now behave according to the current spec (no attribute is set) instead of
+generating a SameSite key without a value.
 
-    <!-- CL 250039 -->
-    The [`Client`](/pkg/net/http/#Client) now sends
-    an explicit `Content-Length:` `0`
-    header in `PATCH` requests with empty bodies,
-    matching the existing behavior of `POST` and `PUT`.
+<!-- CL 250039 -->
+The [`Client`](/pkg/net/http/#Client) now sends
+an explicit `Content-Length:` `0`
+header in `PATCH` requests with empty bodies,
+matching the existing behavior of `POST` and `PUT`.
 
-    <!-- CL 249440 -->
-    The [`ProxyFromEnvironment`](/pkg/net/http/#ProxyFromEnvironment)
-    function no longer returns the setting of the `HTTP_PROXY`
-    environment variable for `https://` URLs when
-    `HTTPS_PROXY` is unset.
+<!-- CL 249440 -->
+The [`ProxyFromEnvironment`](/pkg/net/http/#ProxyFromEnvironment)
+function no longer returns the setting of the `HTTP_PROXY`
+environment variable for `https://` URLs when
+`HTTPS_PROXY` is unset.
 
-    <!-- 259917 -->
-    The [`Transport`](/pkg/net/http/#Transport)
-    type has a new field
-    [`GetProxyConnectHeader`](/pkg/net/http/#Transport.GetProxyConnectHeader)
-    which may be set to a function that returns headers to send to a
-    proxy during a `CONNECT` request.
-    In effect `GetProxyConnectHeader` is a dynamic
-    version of the existing field
-    [`ProxyConnectHeader`](/pkg/net/http/#Transport.ProxyConnectHeader);
-    if `GetProxyConnectHeader` is not `nil`,
-    then `ProxyConnectHeader` is ignored.
+<!-- 259917 -->
+The [`Transport`](/pkg/net/http/#Transport)
+type has a new field
+[`GetProxyConnectHeader`](/pkg/net/http/#Transport.GetProxyConnectHeader)
+which may be set to a function that returns headers to send to a
+proxy during a `CONNECT` request.
+In effect `GetProxyConnectHeader` is a dynamic
+version of the existing field
+[`ProxyConnectHeader`](/pkg/net/http/#Transport.ProxyConnectHeader);
+if `GetProxyConnectHeader` is not `nil`,
+then `ProxyConnectHeader` is ignored.
 
-    <!-- CL 243939 -->
-    The new [`http.FS`](/pkg/net/http/#FS)
-    function converts an [`fs.FS`](/pkg/io/fs/#FS)
-    to an [`http.FileSystem`](/pkg/net/http/#FileSystem).
+<!-- CL 243939 -->
+The new [`http.FS`](/pkg/net/http/#FS)
+function converts an [`fs.FS`](/pkg/io/fs/#FS)
+to an [`http.FileSystem`](/pkg/net/http/#FileSystem).
 
 <!-- net/http -->
 
-[net/http/httputil](/pkg/net/http/httputil/)
+#### [net/http/httputil](/pkg/net/http/httputil/)
 
-:   <!-- CL 260637 -->
-    [`ReverseProxy`](/pkg/net/http/httputil/#ReverseProxy)
-    now flushes buffered data more aggressively when proxying
-    streamed responses with unknown body lengths.
+<!-- CL 260637 -->
+[`ReverseProxy`](/pkg/net/http/httputil/#ReverseProxy)
+now flushes buffered data more aggressively when proxying
+streamed responses with unknown body lengths.
 
 <!-- net/http/httputil -->
 
-[net/smtp](/pkg/net/smtp/)
+#### [net/smtp](/pkg/net/smtp/)
 
-:   <!-- CL 247257 -->
-    The [`Client`](/pkg/net/smtp/#Client)'s
-    [`Mail`](/pkg/net/smtp/#Client.Mail)
-    method now sends the `SMTPUTF8` directive to
-    servers that support it, signaling that addresses are encoded in UTF-8.
+<!-- CL 247257 -->
+The [`Client`](/pkg/net/smtp/#Client)'s
+[`Mail`](/pkg/net/smtp/#Client.Mail)
+method now sends the `SMTPUTF8` directive to
+servers that support it, signaling that addresses are encoded in UTF-8.
 
 <!-- net/smtp -->
 
-[os](/pkg/os/)
+#### [os](/pkg/os/)
 
-:   <!-- CL 242998 -->
-    [`Process.Signal`](/pkg/os/#Process.Signal) now
-    returns [`ErrProcessDone`](/pkg/os/#ErrProcessDone)
-    instead of the unexported `errFinished` when the process has
-    already finished.
+<!-- CL 242998 -->
+[`Process.Signal`](/pkg/os/#Process.Signal) now
+returns [`ErrProcessDone`](/pkg/os/#ErrProcessDone)
+instead of the unexported `errFinished` when the process has
+already finished.
 
-    <!-- CL 261540 -->
-    The package defines a new type
-    [`DirEntry`](/pkg/os/#DirEntry)
-    as an alias for [`fs.DirEntry`](/pkg/io/fs/#DirEntry).
-    The new [`ReadDir`](/pkg/os/#ReadDir)
-    function and the new
-    [`File.ReadDir`](/pkg/os/#File.ReadDir)
-    method can be used to read the contents of a directory into a
-    slice of [`DirEntry`](/pkg/os/#DirEntry).
-    The [`File.Readdir`](/pkg/os/#File.Readdir)
-    method (note the lower case `d` in `dir`)
-    still exists, returning a slice of
-    [`FileInfo`](/pkg/os/#FileInfo), but for
-    most programs it will be more efficient to switch to
-    [`File.ReadDir`](/pkg/os/#File.ReadDir).
+<!-- CL 261540 -->
+The package defines a new type
+[`DirEntry`](/pkg/os/#DirEntry)
+as an alias for [`fs.DirEntry`](/pkg/io/fs/#DirEntry).
+The new [`ReadDir`](/pkg/os/#ReadDir)
+function and the new
+[`File.ReadDir`](/pkg/os/#File.ReadDir)
+method can be used to read the contents of a directory into a
+slice of [`DirEntry`](/pkg/os/#DirEntry).
+The [`File.Readdir`](/pkg/os/#File.Readdir)
+method (note the lower case `d` in `dir`)
+still exists, returning a slice of
+[`FileInfo`](/pkg/os/#FileInfo), but for
+most programs it will be more efficient to switch to
+[`File.ReadDir`](/pkg/os/#File.ReadDir).
 
-    <!-- CL 263141 -->
-    The package now defines
-    [`CreateTemp`](/pkg/os/#CreateTemp),
-    [`MkdirTemp`](/pkg/os/#MkdirTemp),
-    [`ReadFile`](/pkg/os/#ReadFile), and
-    [`WriteFile`](/pkg/os/#WriteFile),
-    to be used instead of functions defined in the
-    [`io/ioutil`](/pkg/io/ioutil/) package.
+<!-- CL 263141 -->
+The package now defines
+[`CreateTemp`](/pkg/os/#CreateTemp),
+[`MkdirTemp`](/pkg/os/#MkdirTemp),
+[`ReadFile`](/pkg/os/#ReadFile), and
+[`WriteFile`](/pkg/os/#WriteFile),
+to be used instead of functions defined in the
+[`io/ioutil`](/pkg/io/ioutil/) package.
 
-    <!-- CL 243906 -->
-    The types [`FileInfo`](/pkg/os/#FileInfo),
-    [`FileMode`](/pkg/os/#FileMode), and
-    [`PathError`](/pkg/os/#PathError)
-    are now aliases for types of the same name in the
-    [`io/fs`](/pkg/io/fs/) package.
-    Function signatures in the [`os`](/pkg/os/)
-    package have been updated to refer to the names in the
-    [`io/fs`](/pkg/io/fs/) package.
-    This should not affect any existing code.
+<!-- CL 243906 -->
+The types [`FileInfo`](/pkg/os/#FileInfo),
+[`FileMode`](/pkg/os/#FileMode), and
+[`PathError`](/pkg/os/#PathError)
+are now aliases for types of the same name in the
+[`io/fs`](/pkg/io/fs/) package.
+Function signatures in the [`os`](/pkg/os/)
+package have been updated to refer to the names in the
+[`io/fs`](/pkg/io/fs/) package.
+This should not affect any existing code.
 
-    <!-- CL 243911 -->
-    The new [`DirFS`](/pkg/os/#DirFS) function
-    provides an implementation of
-    [`fs.FS`](/pkg/io/fs/#FS) backed by a tree
-    of operating system files.
+<!-- CL 243911 -->
+The new [`DirFS`](/pkg/os/#DirFS) function
+provides an implementation of
+[`fs.FS`](/pkg/io/fs/#FS) backed by a tree
+of operating system files.
 
 <!-- os -->
 
-[os/signal](/pkg/os/signal/)
+#### [os/signal](/pkg/os/signal/)
 
-:   <!-- CL 219640 -->
-    The new
-    [`NotifyContext`](/pkg/os/signal/#NotifyContext)
-    function allows creating contexts that are canceled upon arrival of
-    specific signals.
+<!-- CL 219640 -->
+The new
+[`NotifyContext`](/pkg/os/signal/#NotifyContext)
+function allows creating contexts that are canceled upon arrival of
+specific signals.
 
 <!-- os/signal -->
 
-[path](/pkg/path/)
+#### [path](/pkg/path/)
 
-:   <!-- CL 264397, golang.org/issues/28614 -->
-    The [`Match`](/pkg/path/#Match) function now
-    returns an error if the unmatched part of the pattern has a
-    syntax error. Previously, the function returned early on a failed
-    match, and thus did not report any later syntax error in the
-    pattern.
+<!-- CL 264397, golang.org/issues/28614 -->
+The [`Match`](/pkg/path/#Match) function now
+returns an error if the unmatched part of the pattern has a
+syntax error. Previously, the function returned early on a failed
+match, and thus did not report any later syntax error in the
+pattern.
 
 <!-- path -->
 
-[path/filepath](/pkg/path/filepath/)
+#### [path/filepath](/pkg/path/filepath/)
 
-:   <!-- CL 267887 -->
-    The new function
-    [`WalkDir`](/pkg/path/filepath/#WalkDir)
-    is similar to
-    [`Walk`](/pkg/path/filepath/#Walk),
-    but is typically more efficient.
-    The function passed to `WalkDir` receives a
-    [`fs.DirEntry`](/pkg/io/fs/#DirEntry)
-    instead of a
-    [`fs.FileInfo`](/pkg/io/fs/#FileInfo).
-    (To clarify for those who recall the `Walk` function
-    as taking an [`os.FileInfo`](/pkg/os/#FileInfo),
-    `os.FileInfo` is now an alias for `fs.FileInfo`.)
+<!-- CL 267887 -->
+The new function
+[`WalkDir`](/pkg/path/filepath/#WalkDir)
+is similar to
+[`Walk`](/pkg/path/filepath/#Walk),
+but is typically more efficient.
+The function passed to `WalkDir` receives a
+[`fs.DirEntry`](/pkg/io/fs/#DirEntry)
+instead of a
+[`fs.FileInfo`](/pkg/io/fs/#FileInfo).
+(To clarify for those who recall the `Walk` function
+as taking an [`os.FileInfo`](/pkg/os/#FileInfo),
+`os.FileInfo` is now an alias for `fs.FileInfo`.)
 
-    <!-- CL 264397, golang.org/issues/28614 -->
-    The [`Match`](/pkg/path/filepath#Match) and
-    [`Glob`](/pkg/path/filepath#Glob) functions now
-    return an error if the unmatched part of the pattern has a
-    syntax error. Previously, the functions returned early on a failed
-    match, and thus did not report any later syntax error in the
-    pattern.
+<!-- CL 264397, golang.org/issues/28614 -->
+The [`Match`](/pkg/path/filepath#Match) and
+[`Glob`](/pkg/path/filepath#Glob) functions now
+return an error if the unmatched part of the pattern has a
+syntax error. Previously, the functions returned early on a failed
+match, and thus did not report any later syntax error in the
+pattern.
 
 <!-- path/filepath -->
 
-[reflect](/pkg/reflect/)
+#### [reflect](/pkg/reflect/)
 
-:   <!-- CL 192331 -->
-    The Zero function has been optimized to avoid allocations. Code
-    which incorrectly compares the returned Value to another Value
-    using == or DeepEqual may get different results than those
-    obtained in previous Go versions. The documentation
-    for [`reflect.Value`](/pkg/reflect#Value)
-    describes how to compare two `Value`s correctly.
+<!-- CL 192331 -->
+The Zero function has been optimized to avoid allocations. Code
+which incorrectly compares the returned Value to another Value
+using == or DeepEqual may get different results than those
+obtained in previous Go versions. The documentation
+for [`reflect.Value`](/pkg/reflect#Value)
+describes how to compare two `Value`s correctly.
 
 <!-- reflect -->
 
-[runtime/debug](/pkg/runtime/debug/)
+#### [runtime/debug](/pkg/runtime/debug/)
 
-:   <!-- CL 249677 -->
-    The [`runtime.Error`](/pkg/runtime#Error) values
-    used when `SetPanicOnFault` is enabled may now have an
-    `Addr` method. If that method exists, it returns the memory
-    address that triggered the fault.
+<!-- CL 249677 -->
+The [`runtime.Error`](/pkg/runtime#Error) values
+used when `SetPanicOnFault` is enabled may now have an
+`Addr` method. If that method exists, it returns the memory
+address that triggered the fault.
 
 <!-- runtime/debug -->
 
-[strconv](/pkg/strconv/)
+#### [strconv](/pkg/strconv/)
 
-:   <!-- CL 260858 -->
-    [`ParseFloat`](/pkg/strconv/#ParseFloat) now uses
-    the [Eisel-Lemire
-    algorithm](https://nigeltao.github.io/blog/2020/eisel-lemire.html), improving performance by up to a factor of 2. This can
-    also speed up decoding textual formats like [`encoding/json`](/pkg/encoding/json/).
+<!-- CL 260858 -->
+[`ParseFloat`](/pkg/strconv/#ParseFloat) now uses
+the [Eisel-Lemire
+algorithm](https://nigeltao.github.io/blog/2020/eisel-lemire.html), improving performance by up to a factor of 2. This can
+also speed up decoding textual formats like [`encoding/json`](/pkg/encoding/json/).
 
 <!-- strconv -->
 
-[syscall](/pkg/syscall/)
+#### [syscall](/pkg/syscall/)
 
-:   <!-- CL 263271 -->
-    [`NewCallback`](/pkg/syscall/?GOOS=windows#NewCallback)
-    and
-    [`NewCallbackCDecl`](/pkg/syscall/?GOOS=windows#NewCallbackCDecl)
-    now correctly support callback functions with multiple
-    sub-`uintptr`-sized arguments in a row. This may
-    require changing uses of these functions to eliminate manual
-    padding between small arguments.
+<!-- CL 263271 -->
+[`NewCallback`](/pkg/syscall/?GOOS=windows#NewCallback)
+and
+[`NewCallbackCDecl`](/pkg/syscall/?GOOS=windows#NewCallbackCDecl)
+now correctly support callback functions with multiple
+sub-`uintptr`-sized arguments in a row. This may
+require changing uses of these functions to eliminate manual
+padding between small arguments.
 
-    <!-- CL 261917 -->
-    [`SysProcAttr`](/pkg/syscall/?GOOS=windows#SysProcAttr) on Windows has a new `NoInheritHandles` field that disables inheriting handles when creating a new process.
+<!-- CL 261917 -->
+[`SysProcAttr`](/pkg/syscall/?GOOS=windows#SysProcAttr) on Windows has a new `NoInheritHandles` field that disables inheriting handles when creating a new process.
 
-    <!-- CL 269761, golang.org/issue/42584 -->
-    [`DLLError`](/pkg/syscall/?GOOS=windows#DLLError) on Windows now has an `Unwrap` method for unwrapping its underlying error.
+<!-- CL 269761, golang.org/issue/42584 -->
+[`DLLError`](/pkg/syscall/?GOOS=windows#DLLError) on Windows now has an `Unwrap` method for unwrapping its underlying error.
 
-    <!-- CL 210639 -->
-    On Linux,
-    [`Setgid`](/pkg/syscall/#Setgid),
-    [`Setuid`](/pkg/syscall/#Setuid),
-    and related calls are now implemented.
-    Previously, they returned an `syscall.EOPNOTSUPP` error.
+<!-- CL 210639 -->
+On Linux,
+[`Setgid`](/pkg/syscall/#Setgid),
+[`Setuid`](/pkg/syscall/#Setuid),
+and related calls are now implemented.
+Previously, they returned an `syscall.EOPNOTSUPP` error.
 
-    <!-- CL 210639 -->
-    On Linux, the new functions
-    [`AllThreadsSyscall`](/pkg/syscall/#AllThreadsSyscall)
-    and [`AllThreadsSyscall6`](/pkg/syscall/#AllThreadsSyscall6)
-    may be used to make a system call on all Go threads in the process.
-    These functions may only be used by programs that do not use cgo;
-    if a program uses cgo, they will always return
-    [`syscall.ENOTSUP`](/pkg/syscall/#ENOTSUP).
+<!-- CL 210639 -->
+On Linux, the new functions
+[`AllThreadsSyscall`](/pkg/syscall/#AllThreadsSyscall)
+and [`AllThreadsSyscall6`](/pkg/syscall/#AllThreadsSyscall6)
+may be used to make a system call on all Go threads in the process.
+These functions may only be used by programs that do not use cgo;
+if a program uses cgo, they will always return
+[`syscall.ENOTSUP`](/pkg/syscall/#ENOTSUP).
 
 <!-- syscall -->
 
-[testing/iotest](/pkg/testing/iotest/)
+#### [testing/iotest](/pkg/testing/iotest/)
 
-:   <!-- CL 199501 -->
-    The new
-    [`ErrReader`](/pkg/testing/iotest/#ErrReader)
-    function returns an
-    [`io.Reader`](/pkg/io/#Reader) that always
-    returns an error.
+<!-- CL 199501 -->
+The new
+[`ErrReader`](/pkg/testing/iotest/#ErrReader)
+function returns an
+[`io.Reader`](/pkg/io/#Reader) that always
+returns an error.
 
-    <!-- CL 243909 -->
-    The new
-    [`TestReader`](/pkg/testing/iotest/#TestReader)
-    function tests that an [`io.Reader`](/pkg/io/#Reader)
-    behaves correctly.
+<!-- CL 243909 -->
+The new
+[`TestReader`](/pkg/testing/iotest/#TestReader)
+function tests that an [`io.Reader`](/pkg/io/#Reader)
+behaves correctly.
 
 <!-- testing/iotest -->
 
-[text/template](/pkg/text/template/)
+#### [text/template](/pkg/text/template/)
 
-:   <!-- CL 254257, golang.org/issue/29770 -->
-    Newlines characters are now allowed inside action delimiters,
-    permitting actions to span multiple lines.
+<!-- CL 254257, golang.org/issue/29770 -->
+Newlines characters are now allowed inside action delimiters,
+permitting actions to span multiple lines.
 
-    <!-- CL 243938 -->
-    The new [`template.ParseFS`](/pkg/text/template/#ParseFS)
-    function and [`template.Template.ParseFS`](/pkg/text/template/#Template.ParseFS)
-    method are like [`template.ParseGlob`](/pkg/text/template/#ParseGlob)
-    and [`template.Template.ParseGlob`](/pkg/text/template/#Template.ParseGlob),
-    but read the templates from an [`fs.FS`](/pkg/io/fs/#FS).
+<!-- CL 243938 -->
+The new [`template.ParseFS`](/pkg/text/template/#ParseFS)
+function and [`template.Template.ParseFS`](/pkg/text/template/#Template.ParseFS)
+method are like [`template.ParseGlob`](/pkg/text/template/#ParseGlob)
+and [`template.Template.ParseGlob`](/pkg/text/template/#Template.ParseGlob),
+but read the templates from an [`fs.FS`](/pkg/io/fs/#FS).
 
 <!-- text/template -->
 
-[text/template/parse](/pkg/text/template/parse/)
+#### [text/template/parse](/pkg/text/template/parse/)
 
-:   <!-- CL 229398, golang.org/issue/34652 -->
-    A new [`CommentNode`](/pkg/text/template/parse/#CommentNode)
-    was added to the parse tree. The [`Mode`](/pkg/text/template/parse/#Mode)
-    field in the `parse.Tree` enables access to it.
+<!-- CL 229398, golang.org/issue/34652 -->
+A new [`CommentNode`](/pkg/text/template/parse/#CommentNode)
+was added to the parse tree. The [`Mode`](/pkg/text/template/parse/#Mode)
+field in the `parse.Tree` enables access to it.
 
 <!-- text/template/parse -->
 
-[time/tzdata](/pkg/time/tzdata/)
+#### [time/tzdata](/pkg/time/tzdata/)
 
-:   <!-- CL 261877 -->
-    The slim timezone data format is now used for the timezone database in
-    `$GOROOT/lib/time/zoneinfo.zip` and the embedded copy in this
-    package. This reduces the size of the timezone database by about 350 KB.
+<!-- CL 261877 -->
+The slim timezone data format is now used for the timezone database in
+`$GOROOT/lib/time/zoneinfo.zip` and the embedded copy in this
+package. This reduces the size of the timezone database by about 350 KB.
 
 <!-- time/tzdata -->
 
-[unicode](/pkg/unicode/)
+#### [unicode](/pkg/unicode/)
 
-:   <!-- CL 248765 -->
-    The [`unicode`](/pkg/unicode/) package and associated
-    support throughout the system has been upgraded from Unicode 12.0.0 to
-    [Unicode 13.0.0](https://www.unicode.org/versions/Unicode13.0.0/),
-    which adds 5,930 new characters, including four new scripts, and 55 new emoji.
-    Unicode 13.0.0 also designates plane 3 (U+30000-U+3FFFF) as the tertiary
-    ideographic plane.
+<!-- CL 248765 -->
+The [`unicode`](/pkg/unicode/) package and associated
+support throughout the system has been upgraded from Unicode 12.0.0 to
+[Unicode 13.0.0](https://www.unicode.org/versions/Unicode13.0.0/),
+which adds 5,930 new characters, including four new scripts, and 55 new emoji.
+Unicode 13.0.0 also designates plane 3 (U+30000-U+3FFFF) as the tertiary
+ideographic plane.
 
 <!-- unicode -->
diff --git a/_content/doc/go1.17.md b/_content/doc/go1.17.md
index a147108..696bddc 100644
--- a/_content/doc/go1.17.md
+++ b/_content/doc/go1.17.md
@@ -498,598 +498,598 @@
 made with the Go 1 [promise of compatibility](/doc/go1compat)
 in mind.
 
-[archive/zip](/pkg/archive/zip/)
+#### [archive/zip](/pkg/archive/zip/)
 
-:   <!-- CL 312310 -->
-    The new methods [`File.OpenRaw`](/pkg/archive/zip#File.OpenRaw), [`Writer.CreateRaw`](/pkg/archive/zip#Writer.CreateRaw), [`Writer.Copy`](/pkg/archive/zip#Writer.Copy) provide support for cases where performance is a primary concern.
+<!-- CL 312310 -->
+The new methods [`File.OpenRaw`](/pkg/archive/zip#File.OpenRaw), [`Writer.CreateRaw`](/pkg/archive/zip#Writer.CreateRaw), [`Writer.Copy`](/pkg/archive/zip#Writer.Copy) provide support for cases where performance is a primary concern.
 
 <!-- archive/zip -->
 
-[bufio](/pkg/bufio/)
+#### [bufio](/pkg/bufio/)
 
-:   <!-- CL 280492 -->
-    The [`Writer.WriteRune`](/pkg/bufio/#Writer.WriteRune) method
-    now writes the replacement character U+FFFD for negative rune values,
-    as it does for other invalid runes.
+<!-- CL 280492 -->
+The [`Writer.WriteRune`](/pkg/bufio/#Writer.WriteRune) method
+now writes the replacement character U+FFFD for negative rune values,
+as it does for other invalid runes.
 
 <!-- bufio -->
 
-[bytes](/pkg/bytes/)
+#### [bytes](/pkg/bytes/)
 
-:   <!-- CL 280492 -->
-    The [`Buffer.WriteRune`](/pkg/bytes/#Buffer.WriteRune) method
-    now writes the replacement character U+FFFD for negative rune values,
-    as it does for other invalid runes.
+<!-- CL 280492 -->
+The [`Buffer.WriteRune`](/pkg/bytes/#Buffer.WriteRune) method
+now writes the replacement character U+FFFD for negative rune values,
+as it does for other invalid runes.
 
 <!-- bytes -->
 
-[compress/lzw](/pkg/compress/lzw/)
+#### [compress/lzw](/pkg/compress/lzw/)
 
-:   <!-- CL 273667 -->
-    The [`NewReader`](/pkg/compress/lzw/#NewReader)
-    function is guaranteed to return a value of the new
-    type [`Reader`](/pkg/compress/lzw/#Reader),
-    and similarly [`NewWriter`](/pkg/compress/lzw/#NewWriter)
-    is guaranteed to return a value of the new
-    type [`Writer`](/pkg/compress/lzw/#Writer).
-    These new types both implement a `Reset` method
-    ([`Reader.Reset`](/pkg/compress/lzw/#Reader.Reset),
-    [`Writer.Reset`](/pkg/compress/lzw/#Writer.Reset))
-    that allows reuse of the `Reader` or `Writer`.
+<!-- CL 273667 -->
+The [`NewReader`](/pkg/compress/lzw/#NewReader)
+function is guaranteed to return a value of the new
+type [`Reader`](/pkg/compress/lzw/#Reader),
+and similarly [`NewWriter`](/pkg/compress/lzw/#NewWriter)
+is guaranteed to return a value of the new
+type [`Writer`](/pkg/compress/lzw/#Writer).
+These new types both implement a `Reset` method
+([`Reader.Reset`](/pkg/compress/lzw/#Reader.Reset),
+[`Writer.Reset`](/pkg/compress/lzw/#Writer.Reset))
+that allows reuse of the `Reader` or `Writer`.
 
 <!-- compress/lzw -->
 
-[crypto/ed25519](/pkg/crypto/ed25519/)
+#### [crypto/ed25519](/pkg/crypto/ed25519/)
 
-:   <!-- CL 276272 -->
-    The `crypto/ed25519` package has been rewritten, and all
-    operations are now approximately twice as fast on amd64 and arm64.
-    The observable behavior has not otherwise changed.
+<!-- CL 276272 -->
+The `crypto/ed25519` package has been rewritten, and all
+operations are now approximately twice as fast on amd64 and arm64.
+The observable behavior has not otherwise changed.
 
 <!-- crypto/ed25519 -->
 
-[crypto/elliptic](/pkg/crypto/elliptic/)
+#### [crypto/elliptic](/pkg/crypto/elliptic/)
 
-:   <!-- CL 233939 -->
-    [`CurveParams`](/pkg/crypto/elliptic#CurveParams)
-    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 `CurveParams`
-    methods and instead use dedicated
-    [`Curve`](/pkg/crypto/elliptic#Curve) implementations
-    such as [`P256`](/pkg/crypto/elliptic#P256).
+<!-- CL 233939 -->
+[`CurveParams`](/pkg/crypto/elliptic#CurveParams)
+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 `CurveParams`
+methods and instead use dedicated
+[`Curve`](/pkg/crypto/elliptic#Curve) implementations
+such as [`P256`](/pkg/crypto/elliptic#P256).
 
-    <!-- CL 315271, CL 315274 -->
-    The [`P521`](/pkg/crypto/elliptic#P521) curve
-    implementation has been rewritten using code generated by the
-    [fiat-crypto project](https://github.com/mit-plv/fiat-crypto),
-    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.
+<!-- CL 315271, CL 315274 -->
+The [`P521`](/pkg/crypto/elliptic#P521) curve
+implementation has been rewritten using code generated by the
+[fiat-crypto project](https://github.com/mit-plv/fiat-crypto),
+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.
 
 <!-- crypto/elliptic -->
 
-[crypto/rand](/pkg/crypto/rand/)
+#### [crypto/rand](/pkg/crypto/rand/)
 
-:   <!-- CL 302489, CL 299134, CL 269999 -->
-    The `crypto/rand` package now uses the `getentropy`
-    syscall on macOS and the `getrandom` syscall on Solaris,
-    Illumos, and DragonFlyBSD.
+<!-- CL 302489, CL 299134, CL 269999 -->
+The `crypto/rand` package now uses the `getentropy`
+syscall on macOS and the `getrandom` syscall on Solaris,
+Illumos, and DragonFlyBSD.
 
 <!-- crypto/rand -->
 
-[crypto/tls](/pkg/crypto/tls/)
+#### [crypto/tls](/pkg/crypto/tls/)
 
-:   <!-- CL 295370 -->
-    The new [`Conn.HandshakeContext`](/pkg/crypto/tls#Conn.HandshakeContext)
-    method allows the user to control cancellation of an in-progress TLS
-    handshake. The provided context is accessible from various callbacks through the new
-    [`ClientHelloInfo.Context`](/pkg/crypto/tls#ClientHelloInfo.Context) and
-    [`CertificateRequestInfo.Context`](/pkg/crypto/tls#CertificateRequestInfo.Context)
-    methods. Canceling the context after the handshake has finished has no effect.
+<!-- CL 295370 -->
+The new [`Conn.HandshakeContext`](/pkg/crypto/tls#Conn.HandshakeContext)
+method allows the user to control cancellation of an in-progress TLS
+handshake. The provided context is accessible from various callbacks through the new
+[`ClientHelloInfo.Context`](/pkg/crypto/tls#ClientHelloInfo.Context) and
+[`CertificateRequestInfo.Context`](/pkg/crypto/tls#CertificateRequestInfo.Context)
+methods. Canceling the context after the handshake has finished has no effect.
 
-    <!-- CL 314609 -->
-    Cipher suite ordering is now handled entirely by the
-    `crypto/tls` 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
-    [`Config.CipherSuites`](/pkg/crypto/tls#Config.CipherSuites)
-    field is now ignored, as well as the
-    [`Config.PreferServerCipherSuites`](/pkg/crypto/tls#Config.PreferServerCipherSuites)
-    field. Note that `Config.CipherSuites` still allows
-    applications to choose what TLS 1.0–1.2 cipher suites to enable.
+<!-- CL 314609 -->
+Cipher suite ordering is now handled entirely by the
+`crypto/tls` 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
+[`Config.CipherSuites`](/pkg/crypto/tls#Config.CipherSuites)
+field is now ignored, as well as the
+[`Config.PreferServerCipherSuites`](/pkg/crypto/tls#Config.PreferServerCipherSuites)
+field. Note that `Config.CipherSuites` still allows
+applications to choose what TLS 1.0–1.2 cipher suites to enable.
 
-    The 3DES cipher suites have been moved to
-    [`InsecureCipherSuites`](/pkg/crypto/tls#InsecureCipherSuites)
-    due to [fundamental block size-related
-    weakness](https://sweet32.info/). They are still enabled by default but only as a last resort,
-    thanks to the cipher suite ordering change above.
+The 3DES cipher suites have been moved to
+[`InsecureCipherSuites`](/pkg/crypto/tls#InsecureCipherSuites)
+due to [fundamental block size-related
+weakness](https://sweet32.info/). They are still enabled by default but only as a last resort,
+thanks to the cipher suite ordering change above.
 
-    <!-- golang.org/issue/45428 -->
-    Beginning in the next release, Go 1.18, the
-    [`Config.MinVersion`](/pkg/crypto/tls/#Config.MinVersion)
-    for `crypto/tls` 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 `Config.MinVersion`.
-    This will not affect `crypto/tls` servers.
+<!-- golang.org/issue/45428 -->
+Beginning in the next release, Go 1.18, the
+[`Config.MinVersion`](/pkg/crypto/tls/#Config.MinVersion)
+for `crypto/tls` 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 `Config.MinVersion`.
+This will not affect `crypto/tls` servers.
 
 <!-- crypto/tls -->
 
-[crypto/x509](/pkg/crypto/x509/)
+#### [crypto/x509](/pkg/crypto/x509/)
 
-:   <!-- CL 224157 -->
-    [`CreateCertificate`](/pkg/crypto/x509/#CreateCertificate)
-    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.
+<!-- CL 224157 -->
+[`CreateCertificate`](/pkg/crypto/x509/#CreateCertificate)
+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.
 
-    <!-- CL 315209 -->
-    The temporary `GODEBUG=x509ignoreCN=0` flag has been removed.
+<!-- CL 315209 -->
+The temporary `GODEBUG=x509ignoreCN=0` flag has been removed.
 
-    <!-- CL 274234 -->
-    [`ParseCertificate`](/pkg/crypto/x509/#ParseCertificate)
-    has been rewritten, and now consumes ~70% fewer resources. The observable
-    behavior when processing WebPKI certificates has not otherwise changed,
-    except for error messages.
+<!-- CL 274234 -->
+[`ParseCertificate`](/pkg/crypto/x509/#ParseCertificate)
+has been rewritten, and now consumes ~70% fewer resources. The observable
+behavior when processing WebPKI certificates has not otherwise changed,
+except for error messages.
 
-    <!-- CL 321190 -->
-    On BSD systems, `/etc/ssl/certs` is now searched for trusted
-    roots. This adds support for the new system trusted certificate store in
-    FreeBSD 12.2+.
+<!-- CL 321190 -->
+On BSD systems, `/etc/ssl/certs` is now searched for trusted
+roots. This adds support for the new system trusted certificate store in
+FreeBSD 12.2+.
 
-    <!-- golang.org/issue/41682 -->
-    Beginning in the next release, Go 1.18, `crypto/x509` will
-    reject certificates signed with the SHA-1 hash function. This doesn't
-    apply to self-signed root certificates. Practical attacks against SHA-1
-    [have been demonstrated in 2017](https://shattered.io/) and publicly
-    trusted Certificate Authorities have not issued SHA-1 certificates since 2015.
+<!-- golang.org/issue/41682 -->
+Beginning in the next release, Go 1.18, `crypto/x509` will
+reject certificates signed with the SHA-1 hash function. This doesn't
+apply to self-signed root certificates. Practical attacks against SHA-1
+[have been demonstrated in 2017](https://shattered.io/) and publicly
+trusted Certificate Authorities have not issued SHA-1 certificates since 2015.
 
 <!-- crypto/x509 -->
 
-[database/sql](/pkg/database/sql/)
+#### [database/sql](/pkg/database/sql/)
 
-:   <!-- CL 258360 -->
-    The [`DB.Close`](/pkg/database/sql/#DB.Close) method now closes
-    the `connector` field if the type in this field implements the
-    [`io.Closer`](/pkg/io/#Closer) interface.
+<!-- CL 258360 -->
+The [`DB.Close`](/pkg/database/sql/#DB.Close) method now closes
+the `connector` field if the type in this field implements the
+[`io.Closer`](/pkg/io/#Closer) interface.
 
-    <!-- CL 311572 -->
-    The new
-    [`NullInt16`](/pkg/database/sql/#NullInt16)
-    and
-    [`NullByte`](/pkg/database/sql/#NullByte)
-    structs represent the int16 and byte values that may be null. These can be used as
-    destinations of the [`Scan`](/pkg/database/sql/#Scan) method,
-    similar to NullString.
+<!-- CL 311572 -->
+The new
+[`NullInt16`](/pkg/database/sql/#NullInt16)
+and
+[`NullByte`](/pkg/database/sql/#NullByte)
+structs represent the int16 and byte values that may be null. These can be used as
+destinations of the [`Scan`](/pkg/database/sql/#Scan) method,
+similar to NullString.
 
 <!-- database/sql -->
 
-[debug/elf](/pkg/debug/elf/)
+#### [debug/elf](/pkg/debug/elf/)
 
-:   <!-- CL 239217 -->
-    The [`SHT_MIPS_ABIFLAGS`](/pkg/debug/elf/#SHT_MIPS_ABIFLAGS)
-    constant has been added.
+<!-- CL 239217 -->
+The [`SHT_MIPS_ABIFLAGS`](/pkg/debug/elf/#SHT_MIPS_ABIFLAGS)
+constant has been added.
 
 <!-- debug/elf -->
 
-[encoding/binary](/pkg/encoding/binary/)
+#### [encoding/binary](/pkg/encoding/binary/)
 
-:   <!-- CL 299531 -->
-    `binary.Uvarint` will stop reading after `10 bytes` to avoid
-    wasted computations. If more than `10 bytes` are needed, the byte count returned is `-11`.
-    \
-    Previous Go versions could return larger negative counts when reading incorrectly encoded varints.
+<!-- CL 299531 -->
+`binary.Uvarint` will stop reading after `10 bytes` to avoid
+wasted computations. If more than `10 bytes` are needed, the byte count returned is `-11`.
+\
+Previous Go versions could return larger negative counts when reading incorrectly encoded varints.
 
 <!-- encoding/binary -->
 
-[encoding/csv](/pkg/encoding/csv/)
+#### [encoding/csv](/pkg/encoding/csv/)
 
-:   <!-- CL 291290 -->
-    The new
-    [`Reader.FieldPos`](/pkg/encoding/csv/#Reader.FieldPos)
-    method returns the line and column corresponding to the start of
-    a given field in the record most recently returned by
-    [`Read`](/pkg/encoding/csv/#Reader.Read).
+<!-- CL 291290 -->
+The new
+[`Reader.FieldPos`](/pkg/encoding/csv/#Reader.FieldPos)
+method returns the line and column corresponding to the start of
+a given field in the record most recently returned by
+[`Read`](/pkg/encoding/csv/#Reader.Read).
 
 <!-- encoding/csv -->
 
-[encoding/xml](/pkg/encoding/xml/)
+#### [encoding/xml](/pkg/encoding/xml/)
 
-:   <!-- CL 277893 -->
-    When a comment appears within a
-    [`Directive`](/pkg/encoding/xml/#Directive), it is now replaced
-    with a single space instead of being completely elided.
+<!-- CL 277893 -->
+When a comment appears within a
+[`Directive`](/pkg/encoding/xml/#Directive), it is now replaced
+with a single space instead of being completely elided.
 
-    Invalid element or attribute names with leading, trailing, or multiple
-    colons are now stored unmodified into the
-    [`Name.Local`](/pkg/encoding/xml/#Name) field.
+Invalid element or attribute names with leading, trailing, or multiple
+colons are now stored unmodified into the
+[`Name.Local`](/pkg/encoding/xml/#Name) field.
 
 <!-- encoding/xml -->
 
-[flag](/pkg/flag/)
+#### [flag](/pkg/flag/)
 
-:   <!-- CL 271788 -->
-    Flag declarations now panic if an invalid name is specified.
+<!-- CL 271788 -->
+Flag declarations now panic if an invalid name is specified.
 
 <!-- flag -->
 
-[go/build](/pkg/go/build/)
+#### [go/build](/pkg/go/build/)
 
-:   <!-- CL 310732 -->
-    The new
-    [`Context.ToolTags`](/pkg/go/build/#Context.ToolTags)
-    field holds the build tags appropriate to the current Go
-    toolchain configuration.
+<!-- CL 310732 -->
+The new
+[`Context.ToolTags`](/pkg/go/build/#Context.ToolTags)
+field holds the build tags appropriate to the current Go
+toolchain configuration.
 
 <!-- go/build -->
 
-[go/format](/pkg/go/format/)
+#### [go/format](/pkg/go/format/)
 
-:   The [`Source`](/pkg/go/format/#Source) and
-    [`Node`](/pkg/go/format/#Node) functions now
-    synchronize `//go:build` lines with `// +build`
-    lines. If a file only has `// +build` lines, they will be
-    moved to the appropriate location in the file, and matching
-    `//go:build` lines will be added. Otherwise,
-    `// +build` lines will be overwritten based on any existing
-    `//go:build` lines. For more information, see
-    [https://golang.org/design/draft-gobuild](/design/draft-gobuild).
+The [`Source`](/pkg/go/format/#Source) and
+[`Node`](/pkg/go/format/#Node) functions now
+synchronize `//go:build` lines with `// +build`
+lines. If a file only has `// +build` lines, they will be
+moved to the appropriate location in the file, and matching
+`//go:build` lines will be added. Otherwise,
+`// +build` lines will be overwritten based on any existing
+`//go:build` lines. For more information, see
+[https://golang.org/design/draft-gobuild](/design/draft-gobuild).
 
 <!-- go/format -->
 
-[go/parser](/pkg/go/parser/)
+#### [go/parser](/pkg/go/parser/)
 
-:   <!-- CL 306149 -->
-    The new [`SkipObjectResolution`](/pkg/go/parser/#SkipObjectResolution)
-    `Mode` value instructs the parser not to resolve identifiers to
-    their declaration. This may improve parsing speed.
+<!-- CL 306149 -->
+The new [`SkipObjectResolution`](/pkg/go/parser/#SkipObjectResolution)
+`Mode` value instructs the parser not to resolve identifiers to
+their declaration. This may improve parsing speed.
 
 <!-- go/parser -->
 
-[image](/pkg/image/)
+#### [image](/pkg/image/)
 
-:   <!-- CL 311129 -->
-    The concrete image types (`RGBA`, `Gray16` and so on)
-    now implement a new [`RGBA64Image`](/pkg/image/#RGBA64Image)
-    interface. The concrete types that previously implemented
-    [`draw.Image`](/pkg/image/draw/#Image) now also implement
-    [`draw.RGBA64Image`](/pkg/image/draw/#RGBA64Image), a
-    new interface in the `image/draw` package.
+<!-- CL 311129 -->
+The concrete image types (`RGBA`, `Gray16` and so on)
+now implement a new [`RGBA64Image`](/pkg/image/#RGBA64Image)
+interface. The concrete types that previously implemented
+[`draw.Image`](/pkg/image/draw/#Image) now also implement
+[`draw.RGBA64Image`](/pkg/image/draw/#RGBA64Image), a
+new interface in the `image/draw` package.
 
 <!-- image -->
 
-[io/fs](/pkg/io/fs/)
+#### [io/fs](/pkg/io/fs/)
 
-:   <!-- CL 293649 -->
-    The new [`FileInfoToDirEntry`](/pkg/io/fs/#FileInfoToDirEntry) function converts a `FileInfo` to a `DirEntry`.
+<!-- CL 293649 -->
+The new [`FileInfoToDirEntry`](/pkg/io/fs/#FileInfoToDirEntry) function converts a `FileInfo` to a `DirEntry`.
 
 <!-- io/fs -->
 
-[math](/pkg/math/)
+#### [math](/pkg/math/)
 
-:   <!-- CL 247058 -->
-    The math package now defines three more constants: `MaxUint`, `MaxInt` and `MinInt`.
-    For 32-bit systems their values are `2^32 - 1`, `2^31 - 1` and `-2^31`, respectively.
-    For 64-bit systems their values are `2^64 - 1`, `2^63 - 1` and `-2^63`, respectively.
+<!-- CL 247058 -->
+The math package now defines three more constants: `MaxUint`, `MaxInt` and `MinInt`.
+For 32-bit systems their values are `2^32 - 1`, `2^31 - 1` and `-2^31`, respectively.
+For 64-bit systems their values are `2^64 - 1`, `2^63 - 1` and `-2^63`, respectively.
 
 <!-- math -->
 
-[mime](/pkg/mime/)
+#### [mime](/pkg/mime/)
 
-:   <!-- CL 305230 -->
-    On Unix systems, the table of MIME types is now read from the local system's
-    [Shared MIME-info Database](https://specifications.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-0.21.html)
-    when available.
+<!-- CL 305230 -->
+On Unix systems, the table of MIME types is now read from the local system's
+[Shared MIME-info Database](https://specifications.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-0.21.html)
+when available.
 
 <!-- mime -->
 
-[mime/multipart](/pkg/mime/multipart/)
+#### [mime/multipart](/pkg/mime/multipart/)
 
-:   <!-- CL 313809 -->
-    [`Part.FileName`](/pkg/mime/multipart/#Part.FileName)
-    now applies
-    [`filepath.Base`](/pkg/path/filepath/#Base) to the
-    return value. This mitigates potential path traversal vulnerabilities in
-    applications that accept multipart messages, such as `net/http`
-    servers that call
-    [`Request.FormFile`](/pkg/net/http/#Request.FormFile).
+<!-- CL 313809 -->
+[`Part.FileName`](/pkg/mime/multipart/#Part.FileName)
+now applies
+[`filepath.Base`](/pkg/path/filepath/#Base) to the
+return value. This mitigates potential path traversal vulnerabilities in
+applications that accept multipart messages, such as `net/http`
+servers that call
+[`Request.FormFile`](/pkg/net/http/#Request.FormFile).
 
 <!-- mime/multipart -->
 
-[net](/pkg/net/)
+#### [net](/pkg/net/)
 
-:   <!-- CL 272668 -->
-    The new method [`IP.IsPrivate`](/pkg/net/#IP.IsPrivate) reports whether an address is
-    a private IPv4 address according to [RFC 1918](https://datatracker.ietf.org/doc/rfc1918)
-    or a local IPv6 address according [RFC 4193](https://datatracker.ietf.org/doc/rfc4193).
+<!-- CL 272668 -->
+The new method [`IP.IsPrivate`](/pkg/net/#IP.IsPrivate) reports whether an address is
+a private IPv4 address according to [RFC 1918](https://datatracker.ietf.org/doc/rfc1918)
+or a local IPv6 address according [RFC 4193](https://datatracker.ietf.org/doc/rfc4193).
 
-    <!-- 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.
+<!-- 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.
 
-    <!-- CL 307030 -->
-    The [`ErrClosed`](/pkg/net/#ErrClosed) sentinel error and
-    [`ParseError`](/pkg/net/#ParseError) error type now implement
-    the [`net.Error`](/pkg/net/#Error) interface.
+<!-- CL 307030 -->
+The [`ErrClosed`](/pkg/net/#ErrClosed) sentinel error and
+[`ParseError`](/pkg/net/#ParseError) error type now implement
+the [`net.Error`](/pkg/net/#Error) interface.
 
-    <!-- CL 325829 -->
-    The [`ParseIP`](/pkg/net/#ParseIP) and [`ParseCIDR`](/pkg/net/#ParseCIDR)
-    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.
+<!-- CL 325829 -->
+The [`ParseIP`](/pkg/net/#ParseIP) and [`ParseCIDR`](/pkg/net/#ParseCIDR)
+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.
 
 <!-- net -->
 
-[net/http](/pkg/net/http/)
+#### [net/http](/pkg/net/http/)
 
-:   <!-- CL 295370 -->
-    The [`net/http`](/pkg/net/http/) package now uses the new
-    [`(*tls.Conn).HandshakeContext`](/pkg/crypto/tls#Conn.HandshakeContext)
-    with the [`Request`](/pkg/net/http/#Request) context
-    when performing TLS handshakes in the client or server.
+<!-- CL 295370 -->
+The [`net/http`](/pkg/net/http/) package now uses the new
+[`(*tls.Conn).HandshakeContext`](/pkg/crypto/tls#Conn.HandshakeContext)
+with the [`Request`](/pkg/net/http/#Request) context
+when performing TLS handshakes in the client or server.
 
-    <!-- CL 235437 -->
-    Setting the [`Server`](/pkg/net/http/#Server)
-    `ReadTimeout` or `WriteTimeout` fields to a negative value now indicates no timeout
-    rather than an immediate timeout.
+<!-- CL 235437 -->
+Setting the [`Server`](/pkg/net/http/#Server)
+`ReadTimeout` or `WriteTimeout` fields to a negative value now indicates no timeout
+rather than an immediate timeout.
 
-    <!-- CL 308952 -->
-    The [`ReadRequest`](/pkg/net/http/#ReadRequest) function
-    now returns an error when the request has multiple Host headers.
+<!-- CL 308952 -->
+The [`ReadRequest`](/pkg/net/http/#ReadRequest) function
+now returns an error when the request has multiple Host headers.
 
-    <!-- CL 313950 -->
-    When producing a redirect to the cleaned version of a URL,
-    [`ServeMux`](/pkg/net/http/#ServeMux) now always
-    uses relative URLs in the `Location` 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.
+<!-- CL 313950 -->
+When producing a redirect to the cleaned version of a URL,
+[`ServeMux`](/pkg/net/http/#ServeMux) now always
+uses relative URLs in the `Location` 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.
 
-    <!-- CL 308009, CL 313489 -->
-    When interpreting certain HTTP headers handled by `net/http`,
-    non-ASCII characters are now ignored or rejected.
+<!-- CL 308009, CL 313489 -->
+When interpreting certain HTTP headers handled by `net/http`,
+non-ASCII characters are now ignored or rejected.
 
-    <!-- CL 325697 -->
-    If
-    [`Request.ParseForm`](/pkg/net/http/#Request.ParseForm)
-    returns an error when called by
-    [`Request.ParseMultipartForm`](/pkg/net/http/#Request.ParseMultipartForm),
-    the latter now continues populating
-    [`Request.MultipartForm`](/pkg/net/http/#Request.MultipartForm)
-    before returning it.
+<!-- CL 325697 -->
+If
+[`Request.ParseForm`](/pkg/net/http/#Request.ParseForm)
+returns an error when called by
+[`Request.ParseMultipartForm`](/pkg/net/http/#Request.ParseMultipartForm),
+the latter now continues populating
+[`Request.MultipartForm`](/pkg/net/http/#Request.MultipartForm)
+before returning it.
 
 <!-- net/http -->
 
-[net/http/httptest](/pkg/net/http/httptest/)
+#### [net/http/httptest](/pkg/net/http/httptest/)
 
-:   <!-- CL 308950 -->
-    [`ResponseRecorder.WriteHeader`](/pkg/net/http/httptest/#ResponseRecorder.WriteHeader)
-    now panics when the provided code is not a valid three-digit HTTP status code.
-    This matches the behavior of [`ResponseWriter`](/pkg/net/http/#ResponseWriter)
-    implementations in the [`net/http`](/pkg/net/http/) package.
+<!-- CL 308950 -->
+[`ResponseRecorder.WriteHeader`](/pkg/net/http/httptest/#ResponseRecorder.WriteHeader)
+now panics when the provided code is not a valid three-digit HTTP status code.
+This matches the behavior of [`ResponseWriter`](/pkg/net/http/#ResponseWriter)
+implementations in the [`net/http`](/pkg/net/http/) package.
 
 <!-- net/http/httptest -->
 
-[net/url](/pkg/net/url/)
+#### [net/url](/pkg/net/url/)
 
-:   <!-- CL 314850 -->
-    The new method [`Values.Has`](/pkg/net/url/#Values.Has)
-    reports whether a query parameter is set.
+<!-- CL 314850 -->
+The new method [`Values.Has`](/pkg/net/url/#Values.Has)
+reports whether a query parameter is set.
 
 <!-- net/url -->
 
-[os](/pkg/os/)
+#### [os](/pkg/os/)
 
-:   <!-- CL 268020 -->
-    The [`File.WriteString`](/pkg/os/#File.WriteString) method
-    has been optimized to not make a copy of the input string.
+<!-- CL 268020 -->
+The [`File.WriteString`](/pkg/os/#File.WriteString) method
+has been optimized to not make a copy of the input string.
 
 <!-- os -->
 
-[reflect](/pkg/reflect/)
+#### [reflect](/pkg/reflect/)
 
-:   <!-- CL 334669 -->
-    The new
-    [`Value.CanConvert`](/pkg/reflect/#Value.CanConvert)
-    method reports whether a value can be converted to a type.
-    This may be used to avoid a panic when converting a slice to an
-    array pointer type if the slice is too short.
-    Previously it was sufficient to use
-    [`Type.ConvertibleTo`](/pkg/reflect/#Type.ConvertibleTo)
-    for this, but the newly permitted conversion from slice to array
-    pointer type can panic even if the types are convertible.
+<!-- CL 334669 -->
+The new
+[`Value.CanConvert`](/pkg/reflect/#Value.CanConvert)
+method reports whether a value can be converted to a type.
+This may be used to avoid a panic when converting a slice to an
+array pointer type if the slice is too short.
+Previously it was sufficient to use
+[`Type.ConvertibleTo`](/pkg/reflect/#Type.ConvertibleTo)
+for this, but the newly permitted conversion from slice to array
+pointer type can panic even if the types are convertible.
 
-    <!-- CL 266197 -->
-    The new
-    [`StructField.IsExported`](/pkg/reflect/#StructField.IsExported)
-    and
-    [`Method.IsExported`](/pkg/reflect/#Method.IsExported)
-    methods report whether a struct field or type method is exported.
-    They provide a more readable alternative to checking whether `PkgPath`
-    is empty.
+<!-- CL 266197 -->
+The new
+[`StructField.IsExported`](/pkg/reflect/#StructField.IsExported)
+and
+[`Method.IsExported`](/pkg/reflect/#Method.IsExported)
+methods report whether a struct field or type method is exported.
+They provide a more readable alternative to checking whether `PkgPath`
+is empty.
 
-    <!-- CL 281233 -->
-    The new [`VisibleFields`](/pkg/reflect/#VisibleFields) function
-    returns all the visible fields in a struct type, including fields inside anonymous struct members.
+<!-- CL 281233 -->
+The new [`VisibleFields`](/pkg/reflect/#VisibleFields) function
+returns all the visible fields in a struct type, including fields inside anonymous struct members.
 
-    <!-- CL 284136 -->
-    The [`ArrayOf`](/pkg/reflect/#ArrayOf) function now panics when
-    called with a negative length.
+<!-- CL 284136 -->
+The [`ArrayOf`](/pkg/reflect/#ArrayOf) function now panics when
+called with a negative length.
 
-    <!-- CL 301652 -->
-    Checking the [`Type.ConvertibleTo`](/pkg/reflect/#Type.ConvertibleTo) method
-    is no longer sufficient to guarantee that a call to
-    [`Value.Convert`](/pkg/reflect/#Value.Convert) 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](#language) section above.
+<!-- CL 301652 -->
+Checking the [`Type.ConvertibleTo`](/pkg/reflect/#Type.ConvertibleTo) method
+is no longer sufficient to guarantee that a call to
+[`Value.Convert`](/pkg/reflect/#Value.Convert) 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](#language) section above.
 
-    <!-- CL 309729 -->
-    The [`Value.Convert`](/pkg/reflect/#Value.Convert) and
-    [`Type.ConvertibleTo`](/pkg/reflect/#Type.ConvertibleTo) methods
-    have been fixed to not treat types in different packages with the same name
-    as identical, to match what the language allows.
+<!-- CL 309729 -->
+The [`Value.Convert`](/pkg/reflect/#Value.Convert) and
+[`Type.ConvertibleTo`](/pkg/reflect/#Type.ConvertibleTo) methods
+have been fixed to not treat types in different packages with the same name
+as identical, to match what the language allows.
 
 <!-- reflect -->
 
-[runtime/metrics](/pkg/runtime/metrics)
+#### [runtime/metrics](/pkg/runtime/metrics)
 
-:   <!-- 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.
+<!-- 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.
 
 <!-- runtime/metrics -->
 
-[runtime/pprof](/pkg/runtime/pprof)
+#### [runtime/pprof](/pkg/runtime/pprof)
 
-:   <!-- CL 299991 -->
-    Block profiles are no longer biased to favor infrequent long events over
-    frequent short events.
+<!-- CL 299991 -->
+Block profiles are no longer biased to favor infrequent long events over
+frequent short events.
 
 <!-- runtime/pprof -->
 
-[strconv](/pkg/strconv/)
+#### [strconv](/pkg/strconv/)
 
-:   <!-- CL 170079, CL 170080 -->
-    The `strconv` 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.
+<!-- CL 170079, CL 170080 -->
+The `strconv` 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.
 
-    <!-- CL 314775 -->
-    The new [`QuotedPrefix`](/pkg/strconv/#QuotedPrefix) function
-    returns the quoted string (as understood by
-    [`Unquote`](/pkg/strconv/#Unquote))
-    at the start of input.
+<!-- CL 314775 -->
+The new [`QuotedPrefix`](/pkg/strconv/#QuotedPrefix) function
+returns the quoted string (as understood by
+[`Unquote`](/pkg/strconv/#Unquote))
+at the start of input.
 
 <!-- strconv -->
 
-[strings](/pkg/strings/)
+#### [strings](/pkg/strings/)
 
-:   <!-- CL 280492 -->
-    The [`Builder.WriteRune`](/pkg/strings/#Builder.WriteRune) method
-    now writes the replacement character U+FFFD for negative rune values,
-    as it does for other invalid runes.
+<!-- CL 280492 -->
+The [`Builder.WriteRune`](/pkg/strings/#Builder.WriteRune) method
+now writes the replacement character U+FFFD for negative rune values,
+as it does for other invalid runes.
 
 <!-- strings -->
 
-[sync/atomic](/pkg/sync/atomic/)
+#### [sync/atomic](/pkg/sync/atomic/)
 
-:   <!-- CL 241678 -->
-    `atomic.Value` now has [`Swap`](/pkg/sync/atomic/#Value.Swap) and
-    [`CompareAndSwap`](/pkg/sync/atomic/#Value.CompareAndSwap) methods that provide
-    additional atomic operations.
+<!-- CL 241678 -->
+`atomic.Value` now has [`Swap`](/pkg/sync/atomic/#Value.Swap) and
+[`CompareAndSwap`](/pkg/sync/atomic/#Value.CompareAndSwap) methods that provide
+additional atomic operations.
 
 <!-- sync/atomic -->
 
-[syscall](/pkg/syscall/)
+#### [syscall](/pkg/syscall/)
 
-:   <!-- CL 295371 -->
+<!-- CL 295371 -->
 
-    The [`GetQueuedCompletionStatus`](/pkg/syscall/#GetQueuedCompletionStatus) and
-    [`PostQueuedCompletionStatus`](/pkg/syscall/#PostQueuedCompletionStatus)
-    functions are now deprecated. These functions have incorrect signatures and are superseded by
-    equivalents in the [`golang.org/x/sys/windows`](https://godoc.org/golang.org/x/sys/windows) package.
+The [`GetQueuedCompletionStatus`](/pkg/syscall/#GetQueuedCompletionStatus) and
+[`PostQueuedCompletionStatus`](/pkg/syscall/#PostQueuedCompletionStatus)
+functions are now deprecated. These functions have incorrect signatures and are superseded by
+equivalents in the [`golang.org/x/sys/windows`](https://godoc.org/golang.org/x/sys/windows) package.
 
-    <!-- CL 313653 -->
-    On Unix-like systems, the process group of a child process is now set with signals blocked.
-    This avoids sending a `SIGTTOU` to the child when the parent is in a background process group.
+<!-- CL 313653 -->
+On Unix-like systems, the process group of a child process is now set with signals blocked.
+This avoids sending a `SIGTTOU` to the child when the parent is in a background process group.
 
-    <!-- CL 288298, CL 288300 -->
-    The Windows version of
-    [`SysProcAttr`](/pkg/syscall/#SysProcAttr)
-    has two new fields. `AdditionalInheritedHandles` is
-    a list of additional handles to be inherited by the new child
-    process. `ParentProcess` permits specifying the
-    parent process of the new process.
+<!-- CL 288298, CL 288300 -->
+The Windows version of
+[`SysProcAttr`](/pkg/syscall/#SysProcAttr)
+has two new fields. `AdditionalInheritedHandles` is
+a list of additional handles to be inherited by the new child
+process. `ParentProcess` permits specifying the
+parent process of the new process.
 
-    <!-- CL 311570 -->
-    The constant `MSG_CMSG_CLOEXEC` is now defined on
-    DragonFly and all OpenBSD systems (it was already defined on
-    some OpenBSD systems and all FreeBSD, NetBSD, and Linux systems).
+<!-- CL 311570 -->
+The constant `MSG_CMSG_CLOEXEC` is now defined on
+DragonFly and all OpenBSD systems (it was already defined on
+some OpenBSD systems and all FreeBSD, NetBSD, and Linux systems).
 
-    <!-- CL 315281 -->
-    The constants `SYS_WAIT6` and `WEXITED`
-    are now defined on NetBSD systems (`SYS_WAIT6` was
-    already defined on DragonFly and FreeBSD systems;
-    `WEXITED` was already defined on Darwin, DragonFly,
-    FreeBSD, Linux, and Solaris systems).
+<!-- CL 315281 -->
+The constants `SYS_WAIT6` and `WEXITED`
+are now defined on NetBSD systems (`SYS_WAIT6` was
+already defined on DragonFly and FreeBSD systems;
+`WEXITED` was already defined on Darwin, DragonFly,
+FreeBSD, Linux, and Solaris systems).
 
 <!-- syscall -->
 
-[testing](/pkg/testing/)
+#### [testing](/pkg/testing/)
 
-:   <!-- CL 310033 -->
-    Added a new [testing flag](/cmd/go/#hdr-Testing_flags) `-shuffle` which controls the execution order of tests and benchmarks.
+<!-- CL 310033 -->
+Added a new [testing flag](/cmd/go/#hdr-Testing_flags) `-shuffle` which controls the execution order of tests and benchmarks.
 
-    <!-- CL 260577 -->
-    The new
-    [`T.Setenv`](/pkg/testing/#T.Setenv)
-    and [`B.Setenv`](/pkg/testing/#B.Setenv)
-    methods support setting an environment variable for the duration
-    of the test or benchmark.
+<!-- CL 260577 -->
+The new
+[`T.Setenv`](/pkg/testing/#T.Setenv)
+and [`B.Setenv`](/pkg/testing/#B.Setenv)
+methods support setting an environment variable for the duration
+of the test or benchmark.
 
 <!-- testing -->
 
-[text/template/parse](/pkg/text/template/parse/)
+#### [text/template/parse](/pkg/text/template/parse/)
 
-:   <!-- CL 301493 -->
-    The new [`SkipFuncCheck`](/pkg/text/template/parse/#Mode) `Mode`
-    value changes the template parser to not verify that functions are defined.
+<!-- CL 301493 -->
+The new [`SkipFuncCheck`](/pkg/text/template/parse/#Mode) `Mode`
+value changes the template parser to not verify that functions are defined.
 
 <!-- text/template/parse -->
 
-[time](/pkg/time/)
+#### [time](/pkg/time/)
 
-:   <!-- CL 260858 -->
-    The [`Time`](/pkg/time/#Time) type now has a
-    [`GoString`](/pkg/time/#Time.GoString) method that
-    will return a more useful value for times when printed with the
-    `%#v` format specifier in the `fmt` package.
+<!-- CL 260858 -->
+The [`Time`](/pkg/time/#Time) type now has a
+[`GoString`](/pkg/time/#Time.GoString) method that
+will return a more useful value for times when printed with the
+`%#v` format specifier in the `fmt` package.
 
-    <!-- CL 264077 -->
-    The new [`Time.IsDST`](/pkg/time/#Time.IsDST) method can be used to check whether the time
-    is in Daylight Savings Time in its configured location.
+<!-- CL 264077 -->
+The new [`Time.IsDST`](/pkg/time/#Time.IsDST) method can be used to check whether the time
+is in Daylight Savings Time in its configured location.
 
-    <!-- CL 293349 -->
-    The new [`Time.UnixMilli`](/pkg/time/#Time.UnixMilli) and
-    [`Time.UnixMicro`](/pkg/time/#Time.UnixMicro)
-    methods return the number of milliseconds and microseconds elapsed since
-    January 1, 1970 UTC respectively.
-    \
-    The new [`UnixMilli`](/pkg/time/#UnixMilli) and
-    [`UnixMicro`](/pkg/time/#UnixMicro) functions
-    return the local `Time` corresponding to the given Unix time.
+<!-- CL 293349 -->
+The new [`Time.UnixMilli`](/pkg/time/#Time.UnixMilli) and
+[`Time.UnixMicro`](/pkg/time/#Time.UnixMicro)
+methods return the number of milliseconds and microseconds elapsed since
+January 1, 1970 UTC respectively.
+\
+The new [`UnixMilli`](/pkg/time/#UnixMilli) and
+[`UnixMicro`](/pkg/time/#UnixMicro) functions
+return the local `Time` corresponding to the given Unix time.
 
-    <!-- CL 300996 -->
-    The package now accepts comma "," as a separator for fractional seconds when parsing and formatting time.
-    For example, the following time layouts are now accepted:
+<!-- CL 300996 -->
+The package now accepts comma "," as a separator for fractional seconds when parsing and formatting time.
+For example, the following time layouts are now accepted:
 
-      - 2006-01-02 15:04:05,999999999 -0700 MST
-      - Mon Jan \_2 15:04:05,000000 2006
-      - Monday, January 2 15:04:05,000 2006
+  - 2006-01-02 15:04:05,999999999 -0700 MST
+  - Mon Jan \_2 15:04:05,000000 2006
+  - Monday, January 2 15:04:05,000 2006
 
 
-    <!-- CL 320252 -->
-    The new constant [`Layout`](/pkg/time/#Layout)
-    defines the reference time.
+<!-- CL 320252 -->
+The new constant [`Layout`](/pkg/time/#Layout)
+defines the reference time.
 
 <!-- time -->
 
-[unicode](/pkg/unicode/)
+#### [unicode](/pkg/unicode/)
 
-:   <!-- CL 280493 -->
-    The [`Is`](/pkg/unicode/#Is),
-    [`IsGraphic`](/pkg/unicode/#IsGraphic),
-    [`IsLetter`](/pkg/unicode/#IsLetter),
-    [`IsLower`](/pkg/unicode/#IsLower),
-    [`IsMark`](/pkg/unicode/#IsMark),
-    [`IsNumber`](/pkg/unicode/#IsNumber),
-    [`IsPrint`](/pkg/unicode/#IsPrint),
-    [`IsPunct`](/pkg/unicode/#IsPunct),
-    [`IsSpace`](/pkg/unicode/#IsSpace),
-    [`IsSymbol`](/pkg/unicode/#IsSymbol), and
-    [`IsUpper`](/pkg/unicode/#IsUpper) functions
-    now return `false` on negative rune values, as they do for other invalid runes.
+<!-- CL 280493 -->
+The [`Is`](/pkg/unicode/#Is),
+[`IsGraphic`](/pkg/unicode/#IsGraphic),
+[`IsLetter`](/pkg/unicode/#IsLetter),
+[`IsLower`](/pkg/unicode/#IsLower),
+[`IsMark`](/pkg/unicode/#IsMark),
+[`IsNumber`](/pkg/unicode/#IsNumber),
+[`IsPrint`](/pkg/unicode/#IsPrint),
+[`IsPunct`](/pkg/unicode/#IsPunct),
+[`IsSpace`](/pkg/unicode/#IsSpace),
+[`IsSymbol`](/pkg/unicode/#IsSymbol), and
+[`IsUpper`](/pkg/unicode/#IsUpper) functions
+now return `false` on negative rune values, as they do for other invalid runes.
 
 <!-- unicode -->
diff --git a/_content/doc/go1.18.md b/_content/doc/go1.18.md
index 951c959..dbf7409 100644
--- a/_content/doc/go1.18.md
+++ b/_content/doc/go1.18.md
@@ -96,20 +96,20 @@
 the Go 1 guarantee and may change as we gain more experience with
 generics.
 
-[`golang.org/x/exp/constraints`](https://pkg.go.dev/golang.org/x/exp/constraints)
+#### [`golang.org/x/exp/constraints`](https://pkg.go.dev/golang.org/x/exp/constraints)
 
-:   Constraints that are useful for generic code, such as
-    [`constraints.Ordered`](https://pkg.go.dev/golang.org/x/exp/constraints#Ordered).
+Constraints that are useful for generic code, such as
+[`constraints.Ordered`](https://pkg.go.dev/golang.org/x/exp/constraints#Ordered).
 
-[`golang.org/x/exp/slices`](https://pkg.go.dev/golang.org/x/exp/slices)
+#### [`golang.org/x/exp/slices`](https://pkg.go.dev/golang.org/x/exp/slices)
 
-:   A collection of generic functions that operate on slices of
-    any element type.
+A collection of generic functions that operate on slices of
+any element type.
 
-[`golang.org/x/exp/maps`](https://pkg.go.dev/golang.org/x/exp/maps)
+#### [`golang.org/x/exp/maps`](https://pkg.go.dev/golang.org/x/exp/maps)
 
-:   A collection of generic functions that operate on maps of
-    any key or element type.
+A collection of generic functions that operate on maps of
+any key or element type.
 
 
 The current generics implementation has the following known limitations:
@@ -632,569 +632,569 @@
 made with the Go 1 [promise of compatibility](/doc/go1compat)
 in mind.
 
-[bufio](/pkg/bufio/)
+#### [bufio](/pkg/bufio/)
 
-:   <!-- CL 345569 -->
-    The new [`Writer.AvailableBuffer`](/pkg/bufio#Writer.AvailableBuffer)
-    method returns an empty buffer with a possibly non-empty capacity for use
-    with append-like APIs. After appending, the buffer can be provided to a
-    succeeding `Write` call and possibly avoid any copying.
+<!-- CL 345569 -->
+The new [`Writer.AvailableBuffer`](/pkg/bufio#Writer.AvailableBuffer)
+method returns an empty buffer with a possibly non-empty capacity for use
+with append-like APIs. After appending, the buffer can be provided to a
+succeeding `Write` call and possibly avoid any copying.
 
-    <!-- CL 345570 -->
-    The [`Reader.Reset`](/pkg/bufio#Reader.Reset) and
-    [`Writer.Reset`](/pkg/bufio#Writer.Reset) methods
-    now use the default buffer size when called on objects with a
-    `nil` buffer.
+<!-- CL 345570 -->
+The [`Reader.Reset`](/pkg/bufio#Reader.Reset) and
+[`Writer.Reset`](/pkg/bufio#Writer.Reset) methods
+now use the default buffer size when called on objects with a
+`nil` buffer.
 
 <!-- bufio -->
 
-[bytes](/pkg/bytes/)
+#### [bytes](/pkg/bytes/)
 
-:   <!-- CL 351710 -->
-    The new [`Cut`](/pkg/bytes/#Cut) function
-    slices a `[]byte` around a separator. It can replace
-    and simplify many common uses of
-    [`Index`](/pkg/bytes/#Index),
-    [`IndexByte`](/pkg/bytes/#IndexByte),
-    [`IndexRune`](/pkg/bytes/#IndexRune),
-    and [`SplitN`](/pkg/bytes/#SplitN).
+<!-- CL 351710 -->
+The new [`Cut`](/pkg/bytes/#Cut) function
+slices a `[]byte` around a separator. It can replace
+and simplify many common uses of
+[`Index`](/pkg/bytes/#Index),
+[`IndexByte`](/pkg/bytes/#IndexByte),
+[`IndexRune`](/pkg/bytes/#IndexRune),
+and [`SplitN`](/pkg/bytes/#SplitN).
 
-    <!-- CL 323318, CL 332771 -->
-    [`Trim`](/pkg/bytes/#Trim), [`TrimLeft`](/pkg/bytes/#TrimLeft),
-    and [`TrimRight`](/pkg/bytes/#TrimRight) are now allocation free and, especially for
-    small ASCII cutsets, up to 10 times faster.
+<!-- CL 323318, CL 332771 -->
+[`Trim`](/pkg/bytes/#Trim), [`TrimLeft`](/pkg/bytes/#TrimLeft),
+and [`TrimRight`](/pkg/bytes/#TrimRight) are now allocation free and, especially for
+small ASCII cutsets, up to 10 times faster.
 
-    <!-- CL 359485 -->
-    The [`Title`](/pkg/bytes/#Title) function is now deprecated. It doesn't
-    handle Unicode punctuation and language-specific capitalization rules, and is superseded by the
-    [golang.org/x/text/cases](https://golang.org/x/text/cases) package.
+<!-- CL 359485 -->
+The [`Title`](/pkg/bytes/#Title) function is now deprecated. It doesn't
+handle Unicode punctuation and language-specific capitalization rules, and is superseded by the
+[golang.org/x/text/cases](https://golang.org/x/text/cases) package.
 
 <!-- bytes -->
 
-[crypto/elliptic](/pkg/crypto/elliptic/)
+#### [crypto/elliptic](/pkg/crypto/elliptic/)
 
-:   <!-- CL 320071, CL 320072, CL 320074, CL 361402, CL 360014 -->
-    The [`P224`](/pkg/crypto/elliptic#P224),
-    [`P384`](/pkg/crypto/elliptic#P384), and
-    [`P521`](/pkg/crypto/elliptic#P521) curve
-    implementations are now all backed by code generated by the
-    [addchain](https://github.com/mmcloughlin/addchain) and
-    [fiat-crypto](https://github.com/mit-plv/fiat-crypto)
-    projects, the latter of which is based on a formally-verified model
-    of the arithmetic operations. They now use safer complete formulas
-    and internal APIs. P-224 and P-384 are now approximately four times
-    faster. All specific curve implementations are now constant-time.
+<!-- CL 320071, CL 320072, CL 320074, CL 361402, CL 360014 -->
+The [`P224`](/pkg/crypto/elliptic#P224),
+[`P384`](/pkg/crypto/elliptic#P384), and
+[`P521`](/pkg/crypto/elliptic#P521) curve
+implementations are now all backed by code generated by the
+[addchain](https://github.com/mmcloughlin/addchain) and
+[fiat-crypto](https://github.com/mit-plv/fiat-crypto)
+projects, the latter of which is based on a formally-verified model
+of the arithmetic operations. They now use safer complete formulas
+and internal APIs. P-224 and P-384 are now approximately four times
+faster. All specific curve implementations are now constant-time.
 
-    Operating on invalid curve points (those for which the
-    `IsOnCurve` method returns false, and which are never returned
-    by [`Unmarshal`](/pkg/crypto/elliptic#Unmarshal) or
-    a `Curve` method operating on a valid point) has always been
-    undefined behavior, can lead to key recovery attacks, and is now
-    unsupported by the new backend. If an invalid point is supplied to a
-    `P224`, `P384`, or `P521` method, that
-    method will now return a random point. The behavior might change to an
-    explicit panic in a future release.
+Operating on invalid curve points (those for which the
+`IsOnCurve` method returns false, and which are never returned
+by [`Unmarshal`](/pkg/crypto/elliptic#Unmarshal) or
+a `Curve` method operating on a valid point) has always been
+undefined behavior, can lead to key recovery attacks, and is now
+unsupported by the new backend. If an invalid point is supplied to a
+`P224`, `P384`, or `P521` method, that
+method will now return a random point. The behavior might change to an
+explicit panic in a future release.
 
 <!-- crypto/elliptic -->
 
-[crypto/tls](/pkg/crypto/tls/)
+#### [crypto/tls](/pkg/crypto/tls/)
 
-:   <!-- CL 325250 -->
-    The new [`Conn.NetConn`](/pkg/crypto/tls/#Conn.NetConn)
-    method allows access to the underlying
-    [`net.Conn`](/pkg/net#Conn).
+<!-- CL 325250 -->
+The new [`Conn.NetConn`](/pkg/crypto/tls/#Conn.NetConn)
+method allows access to the underlying
+[`net.Conn`](/pkg/net#Conn).
 
 <!-- crypto/tls -->
 
-[crypto/x509](/pkg/crypto/x509)
+#### [crypto/x509](/pkg/crypto/x509)
 
-:   <!-- CL 353132, CL 353403 -->
-    [`Certificate.Verify`](/pkg/crypto/x509/#Certificate.Verify)
-    now uses platform APIs to verify certificate validity on macOS and iOS when it
-    is called with a nil
-    [`VerifyOpts.Roots`](/pkg/crypto/x509/#VerifyOpts.Roots)
-    or when using the root pool returned from
-    [`SystemCertPool`](/pkg/crypto/x509/#SystemCertPool).
+<!-- CL 353132, CL 353403 -->
+[`Certificate.Verify`](/pkg/crypto/x509/#Certificate.Verify)
+now uses platform APIs to verify certificate validity on macOS and iOS when it
+is called with a nil
+[`VerifyOpts.Roots`](/pkg/crypto/x509/#VerifyOpts.Roots)
+or when using the root pool returned from
+[`SystemCertPool`](/pkg/crypto/x509/#SystemCertPool).
 
-    <!-- CL 353589 -->
-    [`SystemCertPool`](/pkg/crypto/x509/#SystemCertPool)
-    is now available on Windows.
+<!-- CL 353589 -->
+[`SystemCertPool`](/pkg/crypto/x509/#SystemCertPool)
+is now available on Windows.
 
-    On Windows, macOS, and iOS, when a
-    [`CertPool`](/pkg/crypto/x509/#CertPool) returned by
-    [`SystemCertPool`](/pkg/crypto/x509/#SystemCertPool)
-    has additional certificates added to it,
-    [`Certificate.Verify`](/pkg/crypto/x509/#Certificate.Verify)
-    will do two verifications: one using the platform verifier APIs and the
-    system roots, and one using the Go verifier and the additional roots.
-    Chains returned by the platform verifier APIs will be prioritized.
+On Windows, macOS, and iOS, when a
+[`CertPool`](/pkg/crypto/x509/#CertPool) returned by
+[`SystemCertPool`](/pkg/crypto/x509/#SystemCertPool)
+has additional certificates added to it,
+[`Certificate.Verify`](/pkg/crypto/x509/#Certificate.Verify)
+will do two verifications: one using the platform verifier APIs and the
+system roots, and one using the Go verifier and the additional roots.
+Chains returned by the platform verifier APIs will be prioritized.
 
-    [`CertPool.Subjects`](/pkg/crypto/x509/#CertPool.Subjects)
-    is deprecated. On Windows, macOS, and iOS the
-    [`CertPool`](/pkg/crypto/x509/#CertPool) returned by
-    [`SystemCertPool`](/pkg/crypto/x509/#SystemCertPool)
-    will return a pool which does not include system roots in the slice
-    returned by `Subjects`, as a static list can't appropriately
-    represent the platform policies and might not be available at all from the
-    platform APIs.
+[`CertPool.Subjects`](/pkg/crypto/x509/#CertPool.Subjects)
+is deprecated. On Windows, macOS, and iOS the
+[`CertPool`](/pkg/crypto/x509/#CertPool) returned by
+[`SystemCertPool`](/pkg/crypto/x509/#SystemCertPool)
+will return a pool which does not include system roots in the slice
+returned by `Subjects`, as a static list can't appropriately
+represent the platform policies and might not be available at all from the
+platform APIs.
 
-    Support for signing certificates using signature algorithms that depend on the
-    MD5 hash (`MD5WithRSA`) may be removed in Go 1.19.
+Support for signing certificates using signature algorithms that depend on the
+MD5 hash (`MD5WithRSA`) may be removed in Go 1.19.
 
-[debug/dwarf](/pkg/debug/dwarf/)
+#### [debug/dwarf](/pkg/debug/dwarf/)
 
-:   <!-- CL 380714 -->
-    The [`StructField`](/pkg/debug/dwarf#StructField)
-    and [`BasicType`](/pkg/debug/dwarf#BasicType)
-    structs both now have a `DataBitOffset` field, which
-    holds the value of the `DW_AT_data_bit_offset`
-    attribute if present.
+<!-- CL 380714 -->
+The [`StructField`](/pkg/debug/dwarf#StructField)
+and [`BasicType`](/pkg/debug/dwarf#BasicType)
+structs both now have a `DataBitOffset` field, which
+holds the value of the `DW_AT_data_bit_offset`
+attribute if present.
 
-[debug/elf](/pkg/debug/elf/)
+#### [debug/elf](/pkg/debug/elf/)
 
-:   <!-- CL 352829 -->
-    The [`R_PPC64_RELATIVE`](/pkg/debug/elf/#R_PPC64_RELATIVE)
-    constant has been added.
+<!-- CL 352829 -->
+The [`R_PPC64_RELATIVE`](/pkg/debug/elf/#R_PPC64_RELATIVE)
+constant has been added.
 
 <!-- debug/elf -->
 
-[debug/plan9obj](/pkg/debug/plan9obj/)
+#### [debug/plan9obj](/pkg/debug/plan9obj/)
 
-:   <!-- CL 350229 -->
-    The [File.Symbols](/pkg/debug/plan9obj#File.Symbols)
-    method now returns the new exported error
-    value [ErrNoSymbols](/pkg/debug/plan9obj#ErrNoSymbols)
-    if the file has no symbol section.
+<!-- CL 350229 -->
+The [File.Symbols](/pkg/debug/plan9obj#File.Symbols)
+method now returns the new exported error
+value [ErrNoSymbols](/pkg/debug/plan9obj#ErrNoSymbols)
+if the file has no symbol section.
 
 <!-- debug/plan9obj -->
 
-[embed](/pkg/embed/)
+#### [embed](/pkg/embed/)
 
-:   <!-- CL 359413 -->
-    A [`go:embed`](/pkg/embed#hdr-Directives)
-    directive may now start with `all:` to include files
-    whose names start with dot or underscore.
+<!-- CL 359413 -->
+A [`go:embed`](/pkg/embed#hdr-Directives)
+directive may now start with `all:` to include files
+whose names start with dot or underscore.
 
 <!-- debug/plan9obj -->
 
-[go/ast](/pkg/go/ast/)
+#### [go/ast](/pkg/go/ast/)
 
-:   <!-- https://golang.org/issue/47781, CL 325689, CL 327149, CL 348375, CL 348609 -->
-    Per the proposal
-    [
-    Additions to go/ast and go/token to support parameterized functions and types
-    ](https://go.googlesource.com/proposal/+/master/design/47781-parameterized-go-ast.md)
-    the following additions are made to the [`go/ast`](/pkg/go/ast) package:
+<!-- https://golang.org/issue/47781, CL 325689, CL 327149, CL 348375, CL 348609 -->
+Per the proposal
+[
+Additions to go/ast and go/token to support parameterized functions and types
+](https://go.googlesource.com/proposal/+/master/design/47781-parameterized-go-ast.md)
+the following additions are made to the [`go/ast`](/pkg/go/ast) package:
 
-      - the [`FuncType`](/pkg/go/ast/#FuncType)
-        and [`TypeSpec`](/pkg/go/ast/#TypeSpec)
-        nodes have a new field `TypeParams` to hold type parameters, if any.
-      - The new expression node [`IndexListExpr`](/pkg/go/ast/#IndexListExpr)
-        represents index expressions with multiple indices, used for function and type instantiations
-        with more than one explicit type argument.
+  - the [`FuncType`](/pkg/go/ast/#FuncType)
+    and [`TypeSpec`](/pkg/go/ast/#TypeSpec)
+    nodes have a new field `TypeParams` to hold type parameters, if any.
+  - The new expression node [`IndexListExpr`](/pkg/go/ast/#IndexListExpr)
+    represents index expressions with multiple indices, used for function and type instantiations
+    with more than one explicit type argument.
 
 
-[go/constant](/pkg/go/constant/)
+#### [go/constant](/pkg/go/constant/)
 
-:   <!-- https://golang.org/issue/46211, CL 320491 -->
-    The new [`Kind.String`](/pkg/go/constant/#Kind.String)
-    method returns a human-readable name for the receiver kind.
+<!-- https://golang.org/issue/46211, CL 320491 -->
+The new [`Kind.String`](/pkg/go/constant/#Kind.String)
+method returns a human-readable name for the receiver kind.
 
-[go/token](/pkg/go/token/)
+#### [go/token](/pkg/go/token/)
 
-:   <!-- https://golang.org/issue/47781, CL 324992 -->
-    The new constant [`TILDE`](/pkg/go/token/#TILDE)
-    represents the `~` token per the proposal
-    [
-    Additions to go/ast and go/token to support parameterized functions and types
-    ](https://go.googlesource.com/proposal/+/master/design/47781-parameterized-go-ast.md).
+<!-- https://golang.org/issue/47781, CL 324992 -->
+The new constant [`TILDE`](/pkg/go/token/#TILDE)
+represents the `~` token per the proposal
+[
+Additions to go/ast and go/token to support parameterized functions and types
+](https://go.googlesource.com/proposal/+/master/design/47781-parameterized-go-ast.md).
 
-[go/types](/pkg/go/types/)
+#### [go/types](/pkg/go/types/)
 
-:   <!-- https://golang.org/issue/46648 -->
-    The new [`Config.GoVersion`](/pkg/go/types/#Config.GoVersion)
-    field sets the accepted Go language version.
+<!-- https://golang.org/issue/46648 -->
+The new [`Config.GoVersion`](/pkg/go/types/#Config.GoVersion)
+field sets the accepted Go language version.
 
-    <!-- https://golang.org/issue/47916 -->
-    Per the proposal
-    [
-    Additions to go/types to support type parameters
-    ](https://go.googlesource.com/proposal/+/master/design/47916-parameterized-go-types.md)
-    the following additions are made to the [`go/types`](/pkg/go/types) package:
+<!-- https://golang.org/issue/47916 -->
+Per the proposal
+[
+Additions to go/types to support type parameters
+](https://go.googlesource.com/proposal/+/master/design/47916-parameterized-go-types.md)
+the following additions are made to the [`go/types`](/pkg/go/types) package:
 
-      - The new type
-        [`TypeParam`](/pkg/go/types/#TypeParam), factory function
-        [`NewTypeParam`](/pkg/go/types/#NewTypeParam),
-        and associated methods are added to represent a type parameter.
-      - The new type
-        [`TypeParamList`](/pkg/go/types/#TypeParamList) holds a list of
-        type parameters.
-      - The new type
-        [`TypeList`](/pkg/go/types/#TypeList) holds a list of types.
-      - The new factory function
-        [`NewSignatureType`](/pkg/go/types/#NewSignatureType) allocates a
-        [`Signature`](/pkg/go/types/#Signature) with
-        (receiver or function) type parameters.
-        To access those type parameters, the `Signature` type has two new methods
-        [`Signature.RecvTypeParams`](/pkg/go/types/#Signature.RecvTypeParams) and
-        [`Signature.TypeParams`](/pkg/go/types/#Signature.TypeParams).
-      - [`Named`](/pkg/go/types/#Named) types have four new methods:
-        [`Named.Origin`](/pkg/go/types/#Named.Origin) to get the original
-        parameterized types of instantiated types,
-        [`Named.TypeArgs`](/pkg/go/types/#Named.TypeArgs) and
-        [`Named.TypeParams`](/pkg/go/types/#Named.TypeParams) to get the
-        type arguments or type parameters of an instantiated or parameterized type, and
-        [`Named.SetTypeParams`](/pkg/go/types/#Named.TypeParams) to set the
-        type parameters (for instance, when importing a named type where allocation of the named
-        type and setting of type parameters cannot be done simultaneously due to possible cycles).
-      - The [`Interface`](/pkg/go/types/#Interface) type has four new methods:
-        [`Interface.IsComparable`](/pkg/go/types/#Interface.IsComparable) and
-        [`Interface.IsMethodSet`](/pkg/go/types/#Interface.IsMethodSet) to
-        query properties of the type set defined by the interface, and
-        [`Interface.MarkImplicit`](/pkg/go/types/#Interface.MarkImplicit) and
-        [`Interface.IsImplicit`](/pkg/go/types/#Interface.IsImplicit) to set
-        and test whether the interface is an implicit interface around a type constraint literal.
-      - The new types
-        [`Union`](/pkg/go/types/#Union) and
-        [`Term`](/pkg/go/types/#Term), factory functions
-        [`NewUnion`](/pkg/go/types/#NewUnion) and
-        [`NewTerm`](/pkg/go/types/#NewTerm), and associated
-        methods are added to represent type sets in interfaces.
-      - The new function
-        [`Instantiate`](/pkg/go/types/#Instantiate)
-        instantiates a parameterized type.
-      - The new [`Info.Instances`](/pkg/go/types/#Info.Instances)
-        map records function and type instantiations through the new
-        [`Instance`](/pkg/go/types/#Instance) type.
-      - <!-- CL 342671 -->
-        The new type [`ArgumentError`](/pkg/go/types/#ArgumentError)
-        and associated methods are added to represent an error related to a type argument.
-      - <!-- CL 353089 -->
-        The new type [`Context`](/pkg/go/types/#Context) and factory function
-        [`NewContext`](/pkg/go/types/#NewContext)
-        are added to facilitate sharing of identical type instances
-        across type-checked packages, via the new
-        [`Config.Context`](/pkg/go/types/#Config.Context)
-        field.
+  - The new type
+    [`TypeParam`](/pkg/go/types/#TypeParam), factory function
+    [`NewTypeParam`](/pkg/go/types/#NewTypeParam),
+    and associated methods are added to represent a type parameter.
+  - The new type
+    [`TypeParamList`](/pkg/go/types/#TypeParamList) holds a list of
+    type parameters.
+  - The new type
+    [`TypeList`](/pkg/go/types/#TypeList) holds a list of types.
+  - The new factory function
+    [`NewSignatureType`](/pkg/go/types/#NewSignatureType) allocates a
+    [`Signature`](/pkg/go/types/#Signature) with
+    (receiver or function) type parameters.
+    To access those type parameters, the `Signature` type has two new methods
+    [`Signature.RecvTypeParams`](/pkg/go/types/#Signature.RecvTypeParams) and
+    [`Signature.TypeParams`](/pkg/go/types/#Signature.TypeParams).
+  - [`Named`](/pkg/go/types/#Named) types have four new methods:
+    [`Named.Origin`](/pkg/go/types/#Named.Origin) to get the original
+    parameterized types of instantiated types,
+    [`Named.TypeArgs`](/pkg/go/types/#Named.TypeArgs) and
+    [`Named.TypeParams`](/pkg/go/types/#Named.TypeParams) to get the
+    type arguments or type parameters of an instantiated or parameterized type, and
+    [`Named.SetTypeParams`](/pkg/go/types/#Named.TypeParams) to set the
+    type parameters (for instance, when importing a named type where allocation of the named
+    type and setting of type parameters cannot be done simultaneously due to possible cycles).
+  - The [`Interface`](/pkg/go/types/#Interface) type has four new methods:
+    [`Interface.IsComparable`](/pkg/go/types/#Interface.IsComparable) and
+    [`Interface.IsMethodSet`](/pkg/go/types/#Interface.IsMethodSet) to
+    query properties of the type set defined by the interface, and
+    [`Interface.MarkImplicit`](/pkg/go/types/#Interface.MarkImplicit) and
+    [`Interface.IsImplicit`](/pkg/go/types/#Interface.IsImplicit) to set
+    and test whether the interface is an implicit interface around a type constraint literal.
+  - The new types
+    [`Union`](/pkg/go/types/#Union) and
+    [`Term`](/pkg/go/types/#Term), factory functions
+    [`NewUnion`](/pkg/go/types/#NewUnion) and
+    [`NewTerm`](/pkg/go/types/#NewTerm), and associated
+    methods are added to represent type sets in interfaces.
+  - The new function
+    [`Instantiate`](/pkg/go/types/#Instantiate)
+    instantiates a parameterized type.
+  - The new [`Info.Instances`](/pkg/go/types/#Info.Instances)
+    map records function and type instantiations through the new
+    [`Instance`](/pkg/go/types/#Instance) type.
+  - <!-- CL 342671 -->
+    The new type [`ArgumentError`](/pkg/go/types/#ArgumentError)
+    and associated methods are added to represent an error related to a type argument.
+  - <!-- CL 353089 -->
+    The new type [`Context`](/pkg/go/types/#Context) and factory function
+    [`NewContext`](/pkg/go/types/#NewContext)
+    are added to facilitate sharing of identical type instances
+    across type-checked packages, via the new
+    [`Config.Context`](/pkg/go/types/#Config.Context)
+    field.
 
-    The predicates
-    [`AssignableTo`](/pkg/go/types/#AssignableTo),
-    [`ConvertibleTo`](/pkg/go/types/#ConvertibleTo),
-    [`Implements`](/pkg/go/types/#Implements),
-    [`Identical`](/pkg/go/types/#Identical),
-    [`IdenticalIgnoreTags`](/pkg/go/types/#IdenticalIgnoreTags), and
-    [`AssertableTo`](/pkg/go/types/#AssertableTo)
-    now also work with arguments that are or contain generalized interfaces,
-    i.e. interfaces that may only be used as type constraints in Go code.
-    Note that the behavior of `AssignableTo`,
-    `ConvertibleTo`, `Implements`, and
-    `AssertableTo` is undefined with arguments that are
-    uninstantiated generic types, and `AssertableTo` is undefined
-    if the first argument is a generalized interface.
+The predicates
+[`AssignableTo`](/pkg/go/types/#AssignableTo),
+[`ConvertibleTo`](/pkg/go/types/#ConvertibleTo),
+[`Implements`](/pkg/go/types/#Implements),
+[`Identical`](/pkg/go/types/#Identical),
+[`IdenticalIgnoreTags`](/pkg/go/types/#IdenticalIgnoreTags), and
+[`AssertableTo`](/pkg/go/types/#AssertableTo)
+now also work with arguments that are or contain generalized interfaces,
+i.e. interfaces that may only be used as type constraints in Go code.
+Note that the behavior of `AssignableTo`,
+`ConvertibleTo`, `Implements`, and
+`AssertableTo` is undefined with arguments that are
+uninstantiated generic types, and `AssertableTo` is undefined
+if the first argument is a generalized interface.
 
-[html/template](/pkg/html/template/)
+#### [html/template](/pkg/html/template/)
 
-:   <!-- CL 321491 -->
-    Within a `range` pipeline the new
-    `{{break}}` command will end the loop early and the
-    new `{{continue}}` command will immediately start the
-    next loop iteration.
+<!-- CL 321491 -->
+Within a `range` pipeline the new
+`{{break}}` command will end the loop early and the
+new `{{continue}}` command will immediately start the
+next loop iteration.
 
-    <!-- CL 321490 -->
-    The `and` function no longer always evaluates all arguments; it
-    stops evaluating arguments after the first argument that evaluates to
-    false. Similarly, the `or` function now stops evaluating
-    arguments after the first argument that evaluates to true. This makes a
-    difference if any of the arguments is a function call.
+<!-- CL 321490 -->
+The `and` function no longer always evaluates all arguments; it
+stops evaluating arguments after the first argument that evaluates to
+false. Similarly, the `or` function now stops evaluating
+arguments after the first argument that evaluates to true. This makes a
+difference if any of the arguments is a function call.
 
 <!-- html/template -->
 
-[image/draw](/pkg/image/draw/)
+#### [image/draw](/pkg/image/draw/)
 
-:   <!-- CL 340049 -->
-    The `Draw` and `DrawMask` fallback implementations
-    (used when the arguments are not the most common image types) are now
-    faster when those arguments implement the optional
-    [`draw.RGBA64Image`](/pkg/image/draw/#RGBA64Image)
-    and [`image.RGBA64Image`](/pkg/image/#RGBA64Image)
-    interfaces that were added in Go 1.17.
+<!-- CL 340049 -->
+The `Draw` and `DrawMask` fallback implementations
+(used when the arguments are not the most common image types) are now
+faster when those arguments implement the optional
+[`draw.RGBA64Image`](/pkg/image/draw/#RGBA64Image)
+and [`image.RGBA64Image`](/pkg/image/#RGBA64Image)
+interfaces that were added in Go 1.17.
 
 <!-- image/draw -->
 
-[net](/pkg/net/)
+#### [net](/pkg/net/)
 
-:   <!-- CL 340261 -->
-    [`net.Error.Temporary`](/pkg/net#Error) has been deprecated.
+<!-- CL 340261 -->
+[`net.Error.Temporary`](/pkg/net#Error) has been deprecated.
 
 <!-- net -->
 
-[net/http](/pkg/net/http/)
+#### [net/http](/pkg/net/http/)
 
-:   <!-- CL 330852 -->
-    On WebAssembly targets, the `Dial`, `DialContext`,
-    `DialTLS` and `DialTLSContext` method fields in
-    [`Transport`](/pkg/net/http/#Transport)
-    will now be correctly used, if specified, for making HTTP requests.
+<!-- CL 330852 -->
+On WebAssembly targets, the `Dial`, `DialContext`,
+`DialTLS` and `DialTLSContext` method fields in
+[`Transport`](/pkg/net/http/#Transport)
+will now be correctly used, if specified, for making HTTP requests.
 
-    <!-- CL 338590 -->
-    The new
-    [`Cookie.Valid`](/pkg/net/http#Cookie.Valid)
-    method reports whether the cookie is valid.
+<!-- CL 338590 -->
+The new
+[`Cookie.Valid`](/pkg/net/http#Cookie.Valid)
+method reports whether the cookie is valid.
 
-    <!-- CL 346569 -->
-    The new
-    [`MaxBytesHandler`](/pkg/net/http#MaxBytesHandler)
-    function creates a `Handler` that wraps its
-    `ResponseWriter` and `Request.Body` with a
-    [`MaxBytesReader`](/pkg/net/http#MaxBytesReader).
+<!-- CL 346569 -->
+The new
+[`MaxBytesHandler`](/pkg/net/http#MaxBytesHandler)
+function creates a `Handler` that wraps its
+`ResponseWriter` and `Request.Body` with a
+[`MaxBytesReader`](/pkg/net/http#MaxBytesReader).
 
-    <!-- CL 359634, CL 360381, CL 362735 -->
-    When looking up a domain name containing non-ASCII characters,
-    the Unicode-to-ASCII conversion is now done in accordance with
-    Nontransitional Processing as defined in the
-    [Unicode IDNA
-    Compatibility Processing](https://unicode.org/reports/tr46/) standard (UTS #46). The
-    interpretation of four distinct runes are changed: ß, ς,
-    zero-width joiner U+200D, and zero-width non-joiner
-    U+200C. Nontransitional Processing is consistent with most
-    applications and web browsers.
+<!-- CL 359634, CL 360381, CL 362735 -->
+When looking up a domain name containing non-ASCII characters,
+the Unicode-to-ASCII conversion is now done in accordance with
+Nontransitional Processing as defined in the
+[Unicode IDNA
+Compatibility Processing](https://unicode.org/reports/tr46/) standard (UTS #46). The
+interpretation of four distinct runes are changed: ß, ς,
+zero-width joiner U+200D, and zero-width non-joiner
+U+200C. Nontransitional Processing is consistent with most
+applications and web browsers.
 
 <!-- net/http -->
 
-[os/user](/pkg/os/user/)
+#### [os/user](/pkg/os/user/)
 
-:   <!-- CL 330753 -->
-    [`User.GroupIds`](/pkg/os/user#User.GroupIds)
-    now uses a Go native implementation when cgo is not available.
+<!-- CL 330753 -->
+[`User.GroupIds`](/pkg/os/user#User.GroupIds)
+now uses a Go native implementation when cgo is not available.
 
 <!-- os/user -->
 
-[reflect](/pkg/reflect/)
+#### [reflect](/pkg/reflect/)
 
-:   <!-- CL 356049, CL 320929 -->
-    The new
-    [`Value.SetIterKey`](/pkg/reflect/#Value.SetIterKey)
-    and [`Value.SetIterValue`](/pkg/reflect/#Value.SetIterValue)
-    methods set a Value using a map iterator as the source. They are equivalent to
-    `Value.Set(iter.Key())` and `Value.Set(iter.Value())`, but
-    do fewer allocations.
+<!-- CL 356049, CL 320929 -->
+The new
+[`Value.SetIterKey`](/pkg/reflect/#Value.SetIterKey)
+and [`Value.SetIterValue`](/pkg/reflect/#Value.SetIterValue)
+methods set a Value using a map iterator as the source. They are equivalent to
+`Value.Set(iter.Key())` and `Value.Set(iter.Value())`, but
+do fewer allocations.
 
-    <!-- CL 350691 -->
-    The new
-    [`Value.UnsafePointer`](/pkg/reflect/#Value.UnsafePointer)
-    method returns the Value's value as an [`unsafe.Pointer`](/pkg/unsafe/#Pointer).
-    This allows callers to migrate from [`Value.UnsafeAddr`](/pkg/reflect/#Value.UnsafeAddr)
-    and [`Value.Pointer`](/pkg/reflect/#Value.Pointer)
-    to eliminate the need to perform uintptr to unsafe.Pointer conversions at the callsite (as unsafe.Pointer rules require).
+<!-- CL 350691 -->
+The new
+[`Value.UnsafePointer`](/pkg/reflect/#Value.UnsafePointer)
+method returns the Value's value as an [`unsafe.Pointer`](/pkg/unsafe/#Pointer).
+This allows callers to migrate from [`Value.UnsafeAddr`](/pkg/reflect/#Value.UnsafeAddr)
+and [`Value.Pointer`](/pkg/reflect/#Value.Pointer)
+to eliminate the need to perform uintptr to unsafe.Pointer conversions at the callsite (as unsafe.Pointer rules require).
 
-    <!-- CL 321891 -->
-    The new
-    [`MapIter.Reset`](/pkg/reflect/#MapIter.Reset)
-    method changes its receiver to iterate over a
-    different map. The use of
-    [`MapIter.Reset`](/pkg/reflect/#MapIter.Reset)
-    allows allocation-free iteration
-    over many maps.
+<!-- CL 321891 -->
+The new
+[`MapIter.Reset`](/pkg/reflect/#MapIter.Reset)
+method changes its receiver to iterate over a
+different map. The use of
+[`MapIter.Reset`](/pkg/reflect/#MapIter.Reset)
+allows allocation-free iteration
+over many maps.
 
-    <!-- CL 352131 -->
-    A number of methods (
-    [`Value.CanInt`](/pkg/reflect#Value.CanInt),
-    [`Value.CanUint`](/pkg/reflect#Value.CanUint),
-    [`Value.CanFloat`](/pkg/reflect#Value.CanFloat),
-    [`Value.CanComplex`](/pkg/reflect#Value.CanComplex)
-    )
-    have been added to
-    [`Value`](/pkg/reflect#Value)
-    to test if a conversion is safe.
+<!-- CL 352131 -->
+A number of methods (
+[`Value.CanInt`](/pkg/reflect#Value.CanInt),
+[`Value.CanUint`](/pkg/reflect#Value.CanUint),
+[`Value.CanFloat`](/pkg/reflect#Value.CanFloat),
+[`Value.CanComplex`](/pkg/reflect#Value.CanComplex)
+)
+have been added to
+[`Value`](/pkg/reflect#Value)
+to test if a conversion is safe.
 
-    <!-- CL 357962 -->
-    [`Value.FieldByIndexErr`](/pkg/reflect#Value.FieldByIndexErr)
-    has been added to avoid the panic that occurs in
-    [`Value.FieldByIndex`](/pkg/reflect#Value.FieldByIndex)
-    when stepping through a nil pointer to an embedded struct.
+<!-- CL 357962 -->
+[`Value.FieldByIndexErr`](/pkg/reflect#Value.FieldByIndexErr)
+has been added to avoid the panic that occurs in
+[`Value.FieldByIndex`](/pkg/reflect#Value.FieldByIndex)
+when stepping through a nil pointer to an embedded struct.
 
-    <!-- CL 341333 -->
-    [`reflect.Ptr`](/pkg/reflect#Ptr) and
-    [`reflect.PtrTo`](/pkg/reflect#PtrTo)
-    have been renamed to
-    [`reflect.Pointer`](/pkg/reflect#Pointer) and
-    [`reflect.PointerTo`](/pkg/reflect#PointerTo),
-    respectively, for consistency with the rest of the reflect package.
-    The old names will continue to work, but will be deprecated in a
-    future Go release.
+<!-- CL 341333 -->
+[`reflect.Ptr`](/pkg/reflect#Ptr) and
+[`reflect.PtrTo`](/pkg/reflect#PtrTo)
+have been renamed to
+[`reflect.Pointer`](/pkg/reflect#Pointer) and
+[`reflect.PointerTo`](/pkg/reflect#PointerTo),
+respectively, for consistency with the rest of the reflect package.
+The old names will continue to work, but will be deprecated in a
+future Go release.
 
 <!-- reflect -->
 
-[regexp](/pkg/regexp/)
+#### [regexp](/pkg/regexp/)
 
-:   <!-- CL 354569 -->
-    [`regexp`](/pkg/regexp/)
-    now treats each invalid byte of a UTF-8 string as `U+FFFD`.
+<!-- CL 354569 -->
+[`regexp`](/pkg/regexp/)
+now treats each invalid byte of a UTF-8 string as `U+FFFD`.
 
 <!-- regexp -->
 
-[runtime/debug](/pkg/runtime/debug/)
+#### [runtime/debug](/pkg/runtime/debug/)
 
-:   <!-- CL 354569 -->
-    The [`BuildInfo`](/pkg/runtime/debug#BuildInfo)
-    struct has two new fields, containing additional information
-    about how the binary was built:
+<!-- CL 354569 -->
+The [`BuildInfo`](/pkg/runtime/debug#BuildInfo)
+struct has two new fields, containing additional information
+about how the binary was built:
 
-      - [`GoVersion`](/pkg/runtime/debug#BuildInfo.GoVersion)
-        holds the version of Go used to build the binary.
-      - [`Settings`](/pkg/runtime/debug#BuildInfo.Settings)
-        is a slice of
-        [`BuildSettings`](/pkg/runtime/debug#BuildSettings)
-        structs holding key/value pairs describing the build.
+  - [`GoVersion`](/pkg/runtime/debug#BuildInfo.GoVersion)
+    holds the version of Go used to build the binary.
+  - [`Settings`](/pkg/runtime/debug#BuildInfo.Settings)
+    is a slice of
+    [`BuildSettings`](/pkg/runtime/debug#BuildSettings)
+    structs holding key/value pairs describing the build.
 
 
 <!-- runtime/debug -->
 
-[runtime/pprof](/pkg/runtime/pprof/)
+#### [runtime/pprof](/pkg/runtime/pprof/)
 
-:   <!-- CL 324129 -->
-    The CPU profiler now uses per-thread timers on Linux. This increases the
-    maximum CPU usage that a profile can observe, and reduces some forms of
-    bias.
+<!-- CL 324129 -->
+The CPU profiler now uses per-thread timers on Linux. This increases the
+maximum CPU usage that a profile can observe, and reduces some forms of
+bias.
 
 <!-- runtime/pprof -->
 
-[strconv](/pkg/strconv/)
+#### [strconv](/pkg/strconv/)
 
-:   <!-- CL 343877 -->
-    [`strconv.Unquote`](/pkg/strconv/#strconv.Unquote)
-    now rejects Unicode surrogate halves.
+<!-- CL 343877 -->
+[`strconv.Unquote`](/pkg/strconv/#strconv.Unquote)
+now rejects Unicode surrogate halves.
 
 <!-- strconv -->
 
-[strings](/pkg/strings/)
+#### [strings](/pkg/strings/)
 
-:   <!-- CL 351710 -->
-    The new [`Cut`](/pkg/strings/#Cut) function
-    slices a `string` around a separator. It can replace
-    and simplify many common uses of
-    [`Index`](/pkg/strings/#Index),
-    [`IndexByte`](/pkg/strings/#IndexByte),
-    [`IndexRune`](/pkg/strings/#IndexRune),
-    and [`SplitN`](/pkg/strings/#SplitN).
+<!-- CL 351710 -->
+The new [`Cut`](/pkg/strings/#Cut) function
+slices a `string` around a separator. It can replace
+and simplify many common uses of
+[`Index`](/pkg/strings/#Index),
+[`IndexByte`](/pkg/strings/#IndexByte),
+[`IndexRune`](/pkg/strings/#IndexRune),
+and [`SplitN`](/pkg/strings/#SplitN).
 
-    <!-- CL 345849 -->
-    The new [`Clone`](/pkg/strings/#Clone) function copies the input
-    `string` without the returned cloned `string` referencing
-    the input string's memory.
+<!-- CL 345849 -->
+The new [`Clone`](/pkg/strings/#Clone) function copies the input
+`string` without the returned cloned `string` referencing
+the input string's memory.
 
-    <!-- CL 323318, CL 332771 -->
-    [`Trim`](/pkg/strings/#Trim), [`TrimLeft`](/pkg/strings/#TrimLeft),
-    and [`TrimRight`](/pkg/strings/#TrimRight) are now allocation free and, especially for
-    small ASCII cutsets, up to 10 times faster.
+<!-- CL 323318, CL 332771 -->
+[`Trim`](/pkg/strings/#Trim), [`TrimLeft`](/pkg/strings/#TrimLeft),
+and [`TrimRight`](/pkg/strings/#TrimRight) are now allocation free and, especially for
+small ASCII cutsets, up to 10 times faster.
 
-    <!-- CL 359485 -->
-    The [`Title`](/pkg/strings/#Title) function is now deprecated. It doesn't
-    handle Unicode punctuation and language-specific capitalization rules, and is superseded by the
-    [golang.org/x/text/cases](https://golang.org/x/text/cases) package.
+<!-- CL 359485 -->
+The [`Title`](/pkg/strings/#Title) function is now deprecated. It doesn't
+handle Unicode punctuation and language-specific capitalization rules, and is superseded by the
+[golang.org/x/text/cases](https://golang.org/x/text/cases) package.
 
 <!-- strings -->
 
-[sync](/pkg/sync/)
+#### [sync](/pkg/sync/)
 
-:   <!-- CL 319769 -->
-    The new methods
-    [`Mutex.TryLock`](/pkg/sync#Mutex.TryLock),
-    [`RWMutex.TryLock`](/pkg/sync#RWMutex.TryLock), and
-    [`RWMutex.TryRLock`](/pkg/sync#RWMutex.TryRLock),
-    will acquire the lock if it is not currently held.
+<!-- CL 319769 -->
+The new methods
+[`Mutex.TryLock`](/pkg/sync#Mutex.TryLock),
+[`RWMutex.TryLock`](/pkg/sync#RWMutex.TryLock), and
+[`RWMutex.TryRLock`](/pkg/sync#RWMutex.TryRLock),
+will acquire the lock if it is not currently held.
 
 <!-- sync -->
 
-[syscall](/pkg/syscall/)
+#### [syscall](/pkg/syscall/)
 
-:   <!-- CL 336550 -->
-    The new function [`SyscallN`](/pkg/syscall/?GOOS=windows#SyscallN)
-    has been introduced for Windows, allowing for calls with arbitrary number
-    of arguments. As a result,
-    [`Syscall`](/pkg/syscall/?GOOS=windows#Syscall),
-    [`Syscall6`](/pkg/syscall/?GOOS=windows#Syscall6),
-    [`Syscall9`](/pkg/syscall/?GOOS=windows#Syscall9),
-    [`Syscall12`](/pkg/syscall/?GOOS=windows#Syscall12),
-    [`Syscall15`](/pkg/syscall/?GOOS=windows#Syscall15), and
-    [`Syscall18`](/pkg/syscall/?GOOS=windows#Syscall18) are
-    deprecated in favor of [`SyscallN`](/pkg/syscall/?GOOS=windows#SyscallN).
+<!-- CL 336550 -->
+The new function [`SyscallN`](/pkg/syscall/?GOOS=windows#SyscallN)
+has been introduced for Windows, allowing for calls with arbitrary number
+of arguments. As a result,
+[`Syscall`](/pkg/syscall/?GOOS=windows#Syscall),
+[`Syscall6`](/pkg/syscall/?GOOS=windows#Syscall6),
+[`Syscall9`](/pkg/syscall/?GOOS=windows#Syscall9),
+[`Syscall12`](/pkg/syscall/?GOOS=windows#Syscall12),
+[`Syscall15`](/pkg/syscall/?GOOS=windows#Syscall15), and
+[`Syscall18`](/pkg/syscall/?GOOS=windows#Syscall18) are
+deprecated in favor of [`SyscallN`](/pkg/syscall/?GOOS=windows#SyscallN).
 
-    <!-- CL 355570 -->
-    [`SysProcAttr.Pdeathsig`](/pkg/syscall/?GOOS=freebsd#SysProcAttr.Pdeathsig)
-    is now supported in FreeBSD.
+<!-- CL 355570 -->
+[`SysProcAttr.Pdeathsig`](/pkg/syscall/?GOOS=freebsd#SysProcAttr.Pdeathsig)
+is now supported in FreeBSD.
 
 <!-- syscall -->
 
-[syscall/js](/pkg/syscall/js/)
+#### [syscall/js](/pkg/syscall/js/)
 
-:   <!-- CL 356430 -->
-    The `Wrapper` interface has been removed.
+<!-- CL 356430 -->
+The `Wrapper` interface has been removed.
 
 <!-- syscall/js -->
 
-[testing](/pkg/testing/)
+#### [testing](/pkg/testing/)
 
-:   <!-- CL 343883 -->
-    The precedence of `/` in the argument for `-run` and
-    `-bench` has been increased. `A/B|C/D` used to be
-    treated as `A/(B|C)/D` and is now treated as
-    `(A/B)|(C/D)`.
+<!-- CL 343883 -->
+The precedence of `/` in the argument for `-run` and
+`-bench` has been increased. `A/B|C/D` used to be
+treated as `A/(B|C)/D` and is now treated as
+`(A/B)|(C/D)`.
 
-    <!-- CL 356669 -->
-    If the `-run` option does not select any tests, the
-    `-count` option is ignored. This could change the behavior of
-    existing tests in the unlikely case that a test changes the set of subtests
-    that are run each time the test function itself is run.
+<!-- CL 356669 -->
+If the `-run` option does not select any tests, the
+`-count` option is ignored. This could change the behavior of
+existing tests in the unlikely case that a test changes the set of subtests
+that are run each time the test function itself is run.
 
-    <!-- CL 251441 -->
-    The new [`testing.F`](/pkg/testing#F) type
-    is used by the new [fuzzing support described
-    above](#fuzzing). Tests also now support the command line
-    options `-test.fuzz`, `-test.fuzztime`, and
-    `-test.fuzzminimizetime`.
+<!-- CL 251441 -->
+The new [`testing.F`](/pkg/testing#F) type
+is used by the new [fuzzing support described
+above](#fuzzing). Tests also now support the command line
+options `-test.fuzz`, `-test.fuzztime`, and
+`-test.fuzzminimizetime`.
 
 <!-- testing -->
 
-[text/template](/pkg/text/template/)
+#### [text/template](/pkg/text/template/)
 
-:   <!-- CL 321491 -->
-    Within a `range` pipeline the new
-    `{{break}}` command will end the loop early and the
-    new `{{continue}}` command will immediately start the
-    next loop iteration.
+<!-- CL 321491 -->
+Within a `range` pipeline the new
+`{{break}}` command will end the loop early and the
+new `{{continue}}` command will immediately start the
+next loop iteration.
 
-    <!-- CL 321490 -->
-    The `and` function no longer always evaluates all arguments; it
-    stops evaluating arguments after the first argument that evaluates to
-    false. Similarly, the `or` function now stops evaluating
-    arguments after the first argument that evaluates to true. This makes a
-    difference if any of the arguments is a function call.
+<!-- CL 321490 -->
+The `and` function no longer always evaluates all arguments; it
+stops evaluating arguments after the first argument that evaluates to
+false. Similarly, the `or` function now stops evaluating
+arguments after the first argument that evaluates to true. This makes a
+difference if any of the arguments is a function call.
 
 <!-- text/template -->
 
-[text/template/parse](/pkg/text/template/parse/)
+#### [text/template/parse](/pkg/text/template/parse/)
 
-:   <!-- CL 321491 -->
-    The package supports the new
-    [text/template](/pkg/text/template/) and
-    [html/template](/pkg/html/template/)
-    `{{break}}` command via the new constant
-    [`NodeBreak`](/pkg/text/template/parse#NodeBreak)
-    and the new type
-    [`BreakNode`](/pkg/text/template/parse#BreakNode),
-    and similarly supports the new `{{continue}}` command
-    via the new constant
-    [`NodeContinue`](/pkg/text/template/parse#NodeContinue)
-    and the new type
-    [`ContinueNode`](/pkg/text/template/parse#ContinueNode).
+<!-- CL 321491 -->
+The package supports the new
+[text/template](/pkg/text/template/) and
+[html/template](/pkg/html/template/)
+`{{break}}` command via the new constant
+[`NodeBreak`](/pkg/text/template/parse#NodeBreak)
+and the new type
+[`BreakNode`](/pkg/text/template/parse#BreakNode),
+and similarly supports the new `{{continue}}` command
+via the new constant
+[`NodeContinue`](/pkg/text/template/parse#NodeContinue)
+and the new type
+[`ContinueNode`](/pkg/text/template/parse#ContinueNode).
 
 <!-- text/template -->
 
-[unicode/utf8](/pkg/unicode/utf8/)
+#### [unicode/utf8](/pkg/unicode/utf8/)
 
-:   <!-- CL 345571 -->
-    The new [`AppendRune`](/pkg/unicode/utf8/#AppendRune) function appends the UTF-8
-    encoding of a `rune` to a `[]byte`.
+<!-- CL 345571 -->
+The new [`AppendRune`](/pkg/unicode/utf8/#AppendRune) function appends the UTF-8
+encoding of a `rune` to a `[]byte`.
 
 <!-- unicode/utf8 -->
diff --git a/_content/doc/go1.19.md b/_content/doc/go1.19.md
index 6e505cd..0a2cb88 100644
--- a/_content/doc/go1.19.md
+++ b/_content/doc/go1.19.md
@@ -317,655 +317,655 @@
 in mind.
 There are also various performance improvements, not enumerated here.
 
-[archive/zip](/pkg/archive/zip/)
+#### [archive/zip](/pkg/archive/zip/)
 
-:   <!-- CL 387976 -->
-    [`Reader`](/pkg/archive/zip/#Reader)
-    now ignores non-ZIP data at the start of a ZIP file, matching most other implementations.
-    This is necessary to read some Java JAR files, among other uses.
+<!-- CL 387976 -->
+[`Reader`](/pkg/archive/zip/#Reader)
+now ignores non-ZIP data at the start of a ZIP file, matching most other implementations.
+This is necessary to read some Java JAR files, among other uses.
 
 <!-- archive/zip -->
 
-[crypto/elliptic](/pkg/crypto/elliptic/)
+#### [crypto/elliptic](/pkg/crypto/elliptic/)
 
-:   <!-- CL 382995 -->
-    Operating on invalid curve points (those for which the
-    `IsOnCurve` method returns false, and which are never returned
-    by `Unmarshal` or by a `Curve` method operating on a
-    valid point) has always been undefined behavior and can lead to key
-    recovery attacks. If an invalid point is supplied to
-    [`Marshal`](/pkg/crypto/elliptic/#Marshal),
-    [`MarshalCompressed`](/pkg/crypto/elliptic/#MarshalCompressed),
-    [`Add`](/pkg/crypto/elliptic/#Curve.Add),
-    [`Double`](/pkg/crypto/elliptic/#Curve.Double), or
-    [`ScalarMult`](/pkg/crypto/elliptic/#Curve.ScalarMult),
-    they will now panic.
+<!-- CL 382995 -->
+Operating on invalid curve points (those for which the
+`IsOnCurve` method returns false, and which are never returned
+by `Unmarshal` or by a `Curve` method operating on a
+valid point) has always been undefined behavior and can lead to key
+recovery attacks. If an invalid point is supplied to
+[`Marshal`](/pkg/crypto/elliptic/#Marshal),
+[`MarshalCompressed`](/pkg/crypto/elliptic/#MarshalCompressed),
+[`Add`](/pkg/crypto/elliptic/#Curve.Add),
+[`Double`](/pkg/crypto/elliptic/#Curve.Double), or
+[`ScalarMult`](/pkg/crypto/elliptic/#Curve.ScalarMult),
+they will now panic.
 
-    <!-- golang.org/issue/52182 -->
-    `ScalarBaseMult` operations on the `P224`,
-    `P384`, and `P521` curves are now up to three
-    times faster, leading to similar speedups in some ECDSA operations. The
-    generic (not platform optimized) `P256` implementation was
-    replaced with one derived from a formally verified model; this might
-    lead to significant slowdowns on 32-bit platforms.
+<!-- golang.org/issue/52182 -->
+`ScalarBaseMult` operations on the `P224`,
+`P384`, and `P521` curves are now up to three
+times faster, leading to similar speedups in some ECDSA operations. The
+generic (not platform optimized) `P256` implementation was
+replaced with one derived from a formally verified model; this might
+lead to significant slowdowns on 32-bit platforms.
 
 <!-- crypto/elliptic -->
 
-[crypto/rand](/pkg/crypto/rand/)
+#### [crypto/rand](/pkg/crypto/rand/)
 
-:   <!-- CL 370894 -->
-    <!-- CL 390038 -->
-    [`Read`](/pkg/crypto/rand/#Read) no longer buffers
-    random data obtained from the operating system between calls. Applications
-    that perform many small reads at high frequency might choose to wrap
-    [`Reader`](/pkg/crypto/rand/#Reader) in a
-    [`bufio.Reader`](/pkg/bufio/#Reader) for performance
-    reasons, taking care to use
-    [`io.ReadFull`](/pkg/io/#ReadFull)
-    to ensure no partial reads occur.
+<!-- CL 370894 -->
+<!-- CL 390038 -->
+[`Read`](/pkg/crypto/rand/#Read) no longer buffers
+random data obtained from the operating system between calls. Applications
+that perform many small reads at high frequency might choose to wrap
+[`Reader`](/pkg/crypto/rand/#Reader) in a
+[`bufio.Reader`](/pkg/bufio/#Reader) for performance
+reasons, taking care to use
+[`io.ReadFull`](/pkg/io/#ReadFull)
+to ensure no partial reads occur.
 
-    <!-- CL 375215 -->
-    On Plan 9, `Read` has been reimplemented, replacing the ANSI
-    X9.31 algorithm with a fast key erasure generator.
+<!-- CL 375215 -->
+On Plan 9, `Read` has been reimplemented, replacing the ANSI
+X9.31 algorithm with a fast key erasure generator.
 
-    <!-- CL 391554 -->
-    <!-- CL 387554 -->
-    The [`Prime`](/pkg/crypto/rand/#Prime)
-    implementation was changed to use only rejection sampling,
-    which removes a bias when generating small primes in non-cryptographic contexts,
-    removes one possible minor timing leak,
-    and better aligns the behavior with BoringSSL,
-    all while simplifying the implementation.
-    The change does produce different outputs for a given random source
-    stream compared to the previous implementation,
-    which can break tests written expecting specific results from
-    specific deterministic random sources.
-    To help prevent such problems in the future,
-    the implementation is now intentionally non-deterministic with respect to the input stream.
+<!-- CL 391554 -->
+<!-- CL 387554 -->
+The [`Prime`](/pkg/crypto/rand/#Prime)
+implementation was changed to use only rejection sampling,
+which removes a bias when generating small primes in non-cryptographic contexts,
+removes one possible minor timing leak,
+and better aligns the behavior with BoringSSL,
+all while simplifying the implementation.
+The change does produce different outputs for a given random source
+stream compared to the previous implementation,
+which can break tests written expecting specific results from
+specific deterministic random sources.
+To help prevent such problems in the future,
+the implementation is now intentionally non-deterministic with respect to the input stream.
 
 <!-- crypto/rand -->
 
-[crypto/tls](/pkg/crypto/tls/)
+#### [crypto/tls](/pkg/crypto/tls/)
 
-:   <!-- CL 400974 -->
-    <!-- https://go.dev/issue/45428 -->
-    The `GODEBUG` option `tls10default=1` has been
-    removed. It is still possible to enable TLS 1.0 client-side by setting
-    [`Config.MinVersion`](/pkg/crypto/tls/#Config.MinVersion).
+<!-- CL 400974 -->
+<!-- https://go.dev/issue/45428 -->
+The `GODEBUG` option `tls10default=1` has been
+removed. It is still possible to enable TLS 1.0 client-side by setting
+[`Config.MinVersion`](/pkg/crypto/tls/#Config.MinVersion).
 
-    <!-- CL 384894 -->
-    The TLS server and client now reject duplicate extensions in TLS
-    handshakes, as required by RFC 5246, Section 7.4.1.4 and RFC 8446, Section
-    4.2.
+<!-- CL 384894 -->
+The TLS server and client now reject duplicate extensions in TLS
+handshakes, as required by RFC 5246, Section 7.4.1.4 and RFC 8446, Section
+4.2.
 
 <!-- crypto/tls -->
 
-[crypto/x509](/pkg/crypto/x509/)
+#### [crypto/x509](/pkg/crypto/x509/)
 
-:   <!-- CL 285872 -->
-    [`CreateCertificate`](/pkg/crypto/x509/#CreateCertificate)
-    no longer supports creating certificates with `SignatureAlgorithm`
-    set to `MD5WithRSA`.
+<!-- CL 285872 -->
+[`CreateCertificate`](/pkg/crypto/x509/#CreateCertificate)
+no longer supports creating certificates with `SignatureAlgorithm`
+set to `MD5WithRSA`.
 
-    <!-- CL 400494 -->
-    `CreateCertificate` no longer accepts negative serial numbers.
+<!-- CL 400494 -->
+`CreateCertificate` no longer accepts negative serial numbers.
 
-    <!-- CL 399827 -->
-    `CreateCertificate` will not emit an empty SEQUENCE anymore
-    when the produced certificate has no extensions.
+<!-- CL 399827 -->
+`CreateCertificate` will not emit an empty SEQUENCE anymore
+when the produced certificate has no extensions.
 
-    <!-- CL 396774 -->
-    Removal of the `GODEBUG` option`x509sha1=1`,
-    originally planned for Go 1.19, has been rescheduled to a future release.
-    Applications using it should work on migrating. Practical attacks against
-    SHA-1 have been demonstrated since 2017 and publicly trusted Certificate
-    Authorities have not issued SHA-1 certificates since 2015.
+<!-- CL 396774 -->
+Removal of the `GODEBUG` option`x509sha1=1`,
+originally planned for Go 1.19, has been rescheduled to a future release.
+Applications using it should work on migrating. Practical attacks against
+SHA-1 have been demonstrated since 2017 and publicly trusted Certificate
+Authorities have not issued SHA-1 certificates since 2015.
 
-    <!-- CL 383215 -->
-    [`ParseCertificate`](/pkg/crypto/x509/#ParseCertificate)
-    and [`ParseCertificateRequest`](/pkg/crypto/x509/#ParseCertificateRequest)
-    now reject certificates and CSRs which contain duplicate extensions.
+<!-- CL 383215 -->
+[`ParseCertificate`](/pkg/crypto/x509/#ParseCertificate)
+and [`ParseCertificateRequest`](/pkg/crypto/x509/#ParseCertificateRequest)
+now reject certificates and CSRs which contain duplicate extensions.
 
-    <!-- https://go.dev/issue/46057 -->
-    <!-- https://go.dev/issue/35044 -->
-    <!-- CL 398237 -->
-    <!-- CL 400175 -->
-    <!-- CL 388915 -->
-    The new [`CertPool.Clone`](/pkg/crypto/x509/#CertPool.Clone)
-    and [`CertPool.Equal`](/pkg/crypto/x509/#CertPool.Equal)
-    methods allow cloning a `CertPool` and checking the equivalence of two
-    `CertPool`s respectively.
+<!-- https://go.dev/issue/46057 -->
+<!-- https://go.dev/issue/35044 -->
+<!-- CL 398237 -->
+<!-- CL 400175 -->
+<!-- CL 388915 -->
+The new [`CertPool.Clone`](/pkg/crypto/x509/#CertPool.Clone)
+and [`CertPool.Equal`](/pkg/crypto/x509/#CertPool.Equal)
+methods allow cloning a `CertPool` and checking the equivalence of two
+`CertPool`s respectively.
 
-    <!-- https://go.dev/issue/50674 -->
-    <!-- CL 390834 -->
-    The new function [`ParseRevocationList`](/pkg/crypto/x509/#ParseRevocationList)
-    provides a faster, safer to use CRL parser which returns a
-    [`RevocationList`](/pkg/crypto/x509/#RevocationList).
-    Parsing a CRL also populates the new `RevocationList` fields
-    `RawIssuer`, `Signature`,
-    `AuthorityKeyId`, and `Extensions`, which are ignored by
-    [`CreateRevocationList`](/pkg/crypto/x509/#CreateRevocationList).
+<!-- https://go.dev/issue/50674 -->
+<!-- CL 390834 -->
+The new function [`ParseRevocationList`](/pkg/crypto/x509/#ParseRevocationList)
+provides a faster, safer to use CRL parser which returns a
+[`RevocationList`](/pkg/crypto/x509/#RevocationList).
+Parsing a CRL also populates the new `RevocationList` fields
+`RawIssuer`, `Signature`,
+`AuthorityKeyId`, and `Extensions`, which are ignored by
+[`CreateRevocationList`](/pkg/crypto/x509/#CreateRevocationList).
 
-    The new method [`RevocationList.CheckSignatureFrom`](/pkg/crypto/x509/#RevocationList.CheckSignatureFrom)
-    checks that the signature on a CRL is a valid signature from a
-    [`Certificate`](/pkg/crypto/x509/#Certificate).
+The new method [`RevocationList.CheckSignatureFrom`](/pkg/crypto/x509/#RevocationList.CheckSignatureFrom)
+checks that the signature on a CRL is a valid signature from a
+[`Certificate`](/pkg/crypto/x509/#Certificate).
 
-    The [`ParseCRL`](/pkg/crypto/x509/#ParseCRL) and
-    [`ParseDERCRL`](/pkg/crypto/x509/#ParseDERCRL) functions
-    are now deprecated in favor of `ParseRevocationList`.
-    The [`Certificate.CheckCRLSignature`](/pkg/crypto/x509/#Certificate.CheckCRLSignature)
-    method is deprecated in favor of `RevocationList.CheckSignatureFrom`.
+The [`ParseCRL`](/pkg/crypto/x509/#ParseCRL) and
+[`ParseDERCRL`](/pkg/crypto/x509/#ParseDERCRL) functions
+are now deprecated in favor of `ParseRevocationList`.
+The [`Certificate.CheckCRLSignature`](/pkg/crypto/x509/#Certificate.CheckCRLSignature)
+method is deprecated in favor of `RevocationList.CheckSignatureFrom`.
 
-    <!-- CL 389555, CL 401115, CL 403554 -->
-    The path builder of [`Certificate.Verify`](/pkg/crypto/x509/#Certificate.Verify)
-    was overhauled and should now produce better chains and/or be more efficient in complicated scenarios.
-    Name constraints are now also enforced on non-leaf certificates.
+<!-- CL 389555, CL 401115, CL 403554 -->
+The path builder of [`Certificate.Verify`](/pkg/crypto/x509/#Certificate.Verify)
+was overhauled and should now produce better chains and/or be more efficient in complicated scenarios.
+Name constraints are now also enforced on non-leaf certificates.
 
 <!-- crypto/x509 -->
 
-[crypto/x509/pkix](/pkg/crypto/x509/pkix/)
+#### [crypto/x509/pkix](/pkg/crypto/x509/pkix/)
 
-:   <!-- CL 390834 -->
-    The types [`CertificateList`](/pkg/crypto/x509/pkix/#CertificateList) and
-    [`TBSCertificateList`](/pkg/crypto/x509/pkix/#TBSCertificateList)
-    have been deprecated. The new [`crypto/x509` CRL functionality](#crypto/x509)
-    should be used instead.
+<!-- CL 390834 -->
+The types [`CertificateList`](/pkg/crypto/x509/pkix/#CertificateList) and
+[`TBSCertificateList`](/pkg/crypto/x509/pkix/#TBSCertificateList)
+have been deprecated. The new [`crypto/x509` CRL functionality](#crypto/x509)
+should be used instead.
 
 <!-- crypto/x509/pkix -->
 
-[debug/elf](/pkg/debug/elf/)
+#### [debug/elf](/pkg/debug/elf/)
 
-:   <!-- CL 396735 -->
-    The new `EM_LOONGARCH` and `R_LARCH_*` constants
-    support the loong64 port.
+<!-- CL 396735 -->
+The new `EM_LOONGARCH` and `R_LARCH_*` constants
+support the loong64 port.
 
 <!-- debug/elf -->
 
-[debug/pe](/pkg/debug/pe/)
+#### [debug/pe](/pkg/debug/pe/)
 
-:   <!-- https://go.dev/issue/51868 -->
-    <!-- CL 394534 -->
-    The new [`File.COFFSymbolReadSectionDefAux`](/pkg/debug/pe/#File.COFFSymbolReadSectionDefAux)
-    method, which returns a [`COFFSymbolAuxFormat5`](/pkg/debug/pe/#COFFSymbolAuxFormat5),
-    provides access to COMDAT information in PE file sections.
-    These are supported by new `IMAGE_COMDAT_*` and `IMAGE_SCN_*` constants.
+<!-- https://go.dev/issue/51868 -->
+<!-- CL 394534 -->
+The new [`File.COFFSymbolReadSectionDefAux`](/pkg/debug/pe/#File.COFFSymbolReadSectionDefAux)
+method, which returns a [`COFFSymbolAuxFormat5`](/pkg/debug/pe/#COFFSymbolAuxFormat5),
+provides access to COMDAT information in PE file sections.
+These are supported by new `IMAGE_COMDAT_*` and `IMAGE_SCN_*` constants.
 
 <!-- debug/pe -->
 
-[encoding/binary](/pkg/encoding/binary/)
+#### [encoding/binary](/pkg/encoding/binary/)
 
-:   <!-- https://go.dev/issue/50601 -->
-    <!-- CL 386017 -->
-    <!-- CL 389636 -->
-    The new interface
-    [`AppendByteOrder`](/pkg/encoding/binary/#AppendByteOrder)
-    provides efficient methods for appending a `uint16`, `uint32`, or `uint64`
-    to a byte slice.
-    [`BigEndian`](/pkg/encoding/binary/#BigEndian) and
-    [`LittleEndian`](/pkg/encoding/binary/#LittleEndian) now implement this interface.
+<!-- https://go.dev/issue/50601 -->
+<!-- CL 386017 -->
+<!-- CL 389636 -->
+The new interface
+[`AppendByteOrder`](/pkg/encoding/binary/#AppendByteOrder)
+provides efficient methods for appending a `uint16`, `uint32`, or `uint64`
+to a byte slice.
+[`BigEndian`](/pkg/encoding/binary/#BigEndian) and
+[`LittleEndian`](/pkg/encoding/binary/#LittleEndian) now implement this interface.
 
-    <!-- https://go.dev/issue/51644 -->
-    <!-- CL 400176 -->
-    Similarly, the new functions
-    [`AppendUvarint`](/pkg/encoding/binary/#AppendUvarint) and
-    [`AppendVarint`](/pkg/encoding/binary/#AppendVarint)
-    are efficient appending versions of
-    [`PutUvarint`](/pkg/encoding/binary/#PutUvarint) and
-    [`PutVarint`](/pkg/encoding/binary/#PutVarint).
+<!-- https://go.dev/issue/51644 -->
+<!-- CL 400176 -->
+Similarly, the new functions
+[`AppendUvarint`](/pkg/encoding/binary/#AppendUvarint) and
+[`AppendVarint`](/pkg/encoding/binary/#AppendVarint)
+are efficient appending versions of
+[`PutUvarint`](/pkg/encoding/binary/#PutUvarint) and
+[`PutVarint`](/pkg/encoding/binary/#PutVarint).
 
 <!-- encoding/binary -->
 
-[encoding/csv](/pkg/encoding/csv/)
+#### [encoding/csv](/pkg/encoding/csv/)
 
-:   <!-- https://go.dev/issue/43401 -->
-    <!-- CL 405675 -->
-    The new method
-    [`Reader.InputOffset`](/pkg/encoding/csv/#Reader.InputOffset)
-    reports the reader's current input position as a byte offset,
-    analogous to `encoding/json`'s
-    [`Decoder.InputOffset`](/pkg/encoding/json/#Decoder.InputOffset).
+<!-- https://go.dev/issue/43401 -->
+<!-- CL 405675 -->
+The new method
+[`Reader.InputOffset`](/pkg/encoding/csv/#Reader.InputOffset)
+reports the reader's current input position as a byte offset,
+analogous to `encoding/json`'s
+[`Decoder.InputOffset`](/pkg/encoding/json/#Decoder.InputOffset).
 
 <!-- encoding/csv -->
 
-[encoding/xml](/pkg/encoding/xml/)
+#### [encoding/xml](/pkg/encoding/xml/)
 
-:   <!-- https://go.dev/issue/45628 -->
-    <!-- CL 311270 -->
-    The new method
-    [`Decoder.InputPos`](/pkg/encoding/xml/#Decoder.InputPos)
-    reports the reader's current input position as a line and column,
-    analogous to `encoding/csv`'s
-    [`Decoder.FieldPos`](/pkg/encoding/csv/#Decoder.FieldPos).
+<!-- https://go.dev/issue/45628 -->
+<!-- CL 311270 -->
+The new method
+[`Decoder.InputPos`](/pkg/encoding/xml/#Decoder.InputPos)
+reports the reader's current input position as a line and column,
+analogous to `encoding/csv`'s
+[`Decoder.FieldPos`](/pkg/encoding/csv/#Decoder.FieldPos).
 
 <!-- encoding/xml -->
 
-[flag](/pkg/flag/)
+#### [flag](/pkg/flag/)
 
-:   <!-- https://go.dev/issue/45754 -->
-    <!-- CL 313329 -->
-    The new function
-    [`TextVar`](/pkg/flag/#TextVar)
-    defines a flag with a value implementing
-    [`encoding.TextUnmarshaler`](/pkg/encoding/#TextUnmarshaler),
-    allowing command-line flag variables to have types such as
-    [`big.Int`](/pkg/math/big/#Int),
-    [`netip.Addr`](/pkg/net/netip/#Addr), and
-    [`time.Time`](/pkg/time/#Time).
+<!-- https://go.dev/issue/45754 -->
+<!-- CL 313329 -->
+The new function
+[`TextVar`](/pkg/flag/#TextVar)
+defines a flag with a value implementing
+[`encoding.TextUnmarshaler`](/pkg/encoding/#TextUnmarshaler),
+allowing command-line flag variables to have types such as
+[`big.Int`](/pkg/math/big/#Int),
+[`netip.Addr`](/pkg/net/netip/#Addr), and
+[`time.Time`](/pkg/time/#Time).
 
 <!-- flag -->
 
-[fmt](/pkg/fmt/)
+#### [fmt](/pkg/fmt/)
 
-:   <!-- https://go.dev/issue/47579 -->
-    <!-- CL 406177 -->
-    The new functions
-    [`Append`](/pkg/fmt/#Append),
-    [`Appendf`](/pkg/fmt/#Appendf), and
-    [`Appendln`](/pkg/fmt/#Appendln)
-    append formatted data to byte slices.
+<!-- https://go.dev/issue/47579 -->
+<!-- CL 406177 -->
+The new functions
+[`Append`](/pkg/fmt/#Append),
+[`Appendf`](/pkg/fmt/#Appendf), and
+[`Appendln`](/pkg/fmt/#Appendln)
+append formatted data to byte slices.
 
 <!-- fmt -->
 
-[go/parser](/pkg/go/parser/)
+#### [go/parser](/pkg/go/parser/)
 
-:   <!-- CL 403696 -->
-    The parser now recognizes `~x` as a unary expression with operator
-    [token.TILDE](/pkg/go/token/#TILDE),
-    allowing better error recovery when a type constraint such as `~int` is used in an incorrect context.
+<!-- CL 403696 -->
+The parser now recognizes `~x` as a unary expression with operator
+[token.TILDE](/pkg/go/token/#TILDE),
+allowing better error recovery when a type constraint such as `~int` is used in an incorrect context.
 
 <!-- go/parser -->
 
-[go/types](/pkg/go/types/)
+#### [go/types](/pkg/go/types/)
 
-:   <!-- https://go.dev/issue/51682 -->
-    <!-- CL 395535 -->
-    The new methods [`Func.Origin`](/pkg/go/types/#Func.Origin)
-    and [`Var.Origin`](/pkg/go/types/#Var.Origin) return the
-    corresponding [`Object`](/pkg/go/types/#Object) of the
-    generic type for synthetic [`Func`](/pkg/go/types/#Func)
-    and [`Var`](/pkg/go/types/#Var) objects created during type
-    instantiation.
+<!-- https://go.dev/issue/51682 -->
+<!-- CL 395535 -->
+The new methods [`Func.Origin`](/pkg/go/types/#Func.Origin)
+and [`Var.Origin`](/pkg/go/types/#Var.Origin) return the
+corresponding [`Object`](/pkg/go/types/#Object) of the
+generic type for synthetic [`Func`](/pkg/go/types/#Func)
+and [`Var`](/pkg/go/types/#Var) objects created during type
+instantiation.
 
-    <!-- https://go.dev/issue/52728 -->
-    <!-- CL 404885 -->
-    It is no longer possible to produce an infinite number of distinct-but-identical
-    [`Named`](/pkg/go/types/#Named) type instantiations via
-    recursive calls to
-    [`Named.Underlying`](/pkg/go/types/#Named.Underlying) or
-    [`Named.Method`](/pkg/go/types/#Named.Method).
+<!-- https://go.dev/issue/52728 -->
+<!-- CL 404885 -->
+It is no longer possible to produce an infinite number of distinct-but-identical
+[`Named`](/pkg/go/types/#Named) type instantiations via
+recursive calls to
+[`Named.Underlying`](/pkg/go/types/#Named.Underlying) or
+[`Named.Method`](/pkg/go/types/#Named.Method).
 
 <!-- go/types -->
 
-[hash/maphash](/pkg/hash/maphash/)
+#### [hash/maphash](/pkg/hash/maphash/)
 
-:   <!-- https://go.dev/issue/42710 -->
-    <!-- CL 392494 -->
-    The new functions
-    [`Bytes`](/pkg/hash/maphash/#Bytes)
-    and
-    [`String`](/pkg/hash/maphash/#String)
-    provide an efficient way hash a single byte slice or string.
-    They are equivalent to using the more general
-    [`Hash`](/pkg/hash/maphash/#Hash)
-    with a single write, but they avoid setup overhead for small inputs.
+<!-- https://go.dev/issue/42710 -->
+<!-- CL 392494 -->
+The new functions
+[`Bytes`](/pkg/hash/maphash/#Bytes)
+and
+[`String`](/pkg/hash/maphash/#String)
+provide an efficient way hash a single byte slice or string.
+They are equivalent to using the more general
+[`Hash`](/pkg/hash/maphash/#Hash)
+with a single write, but they avoid setup overhead for small inputs.
 
 <!-- hash/maphash -->
 
-[html/template](/pkg/html/template/)
+#### [html/template](/pkg/html/template/)
 
-:   <!-- https://go.dev/issue/46121 -->
-    <!-- CL 389156 -->
-    The type [`FuncMap`](/pkg/html/template/#FuncMap)
-    is now an alias for
-    `text/template`'s [`FuncMap`](/pkg/text/template/#FuncMap)
-    instead of its own named type.
-    This allows writing code that operates on a `FuncMap` from either setting.
+<!-- https://go.dev/issue/46121 -->
+<!-- CL 389156 -->
+The type [`FuncMap`](/pkg/html/template/#FuncMap)
+is now an alias for
+`text/template`'s [`FuncMap`](/pkg/text/template/#FuncMap)
+instead of its own named type.
+This allows writing code that operates on a `FuncMap` from either setting.
 
-    <!-- https://go.dev/issue/59153 -->
-    <!-- CL 481987 -->
-    Go 1.19.8 and later
-    [disallow actions in ECMAScript 6 template literals.](/pkg/html/template#hdr-Security_Model)
-    This behavior can be reverted by the `GODEBUG=jstmpllitinterp=1` setting.
+<!-- https://go.dev/issue/59153 -->
+<!-- CL 481987 -->
+Go 1.19.8 and later
+[disallow actions in ECMAScript 6 template literals.](/pkg/html/template#hdr-Security_Model)
+This behavior can be reverted by the `GODEBUG=jstmpllitinterp=1` setting.
 
 <!-- html/template -->
 
-[image/draw](/pkg/image/draw/)
+#### [image/draw](/pkg/image/draw/)
 
-:   <!-- CL 396795 -->
-    [`Draw`](/pkg/image/draw/#Draw) with the
-    [`Src`](/pkg/image/draw/#Src) operator preserves
-    non-premultiplied-alpha colors when destination and source images are
-    both [`image.NRGBA`](/pkg/image/#NRGBA)
-    or both [`image.NRGBA64`](/pkg/image/#NRGBA64).
-    This reverts a behavior change accidentally introduced by a Go 1.18
-    library optimization; the code now matches the behavior in Go 1.17 and earlier.
+<!-- CL 396795 -->
+[`Draw`](/pkg/image/draw/#Draw) with the
+[`Src`](/pkg/image/draw/#Src) operator preserves
+non-premultiplied-alpha colors when destination and source images are
+both [`image.NRGBA`](/pkg/image/#NRGBA)
+or both [`image.NRGBA64`](/pkg/image/#NRGBA64).
+This reverts a behavior change accidentally introduced by a Go 1.18
+library optimization; the code now matches the behavior in Go 1.17 and earlier.
 
 <!-- image/draw -->
 
-[io](/pkg/io/)
+#### [io](/pkg/io/)
 
-:   <!-- https://go.dev/issue/51566 -->
-    <!-- CL 400236 -->
-    [`NopCloser`](/pkg/io/#NopCloser)'s result now implements
-    [`WriterTo`](/pkg/io/#WriterTo)
-    whenever its input does.
+<!-- https://go.dev/issue/51566 -->
+<!-- CL 400236 -->
+[`NopCloser`](/pkg/io/#NopCloser)'s result now implements
+[`WriterTo`](/pkg/io/#WriterTo)
+whenever its input does.
 
-    <!-- https://go.dev/issue/50842 -->
-    [`MultiReader`](/pkg/io/#MultiReader)'s result now implements
-    [`WriterTo`](/pkg/io/#WriterTo) unconditionally.
-    If any underlying reader does not implement `WriterTo`,
-    it is simulated appropriately.
+<!-- https://go.dev/issue/50842 -->
+[`MultiReader`](/pkg/io/#MultiReader)'s result now implements
+[`WriterTo`](/pkg/io/#WriterTo) unconditionally.
+If any underlying reader does not implement `WriterTo`,
+it is simulated appropriately.
 
 <!-- io -->
 
-[mime](/pkg/mime/)
+#### [mime](/pkg/mime/)
 
-:   <!-- CL 406894 -->
-    On Windows only, the mime package now ignores a registry entry
-    recording that the extension `.js` should have MIME
-    type `text/plain`. This is a common unintentional
-    misconfiguration on Windows systems. The effect is
-    that `.js` will have the default MIME
-    type `text/javascript; charset=utf-8`.
-    Applications that expect `text/plain` on Windows must
-    now explicitly call
-    [`AddExtensionType`](/pkg/mime/#AddExtensionType).
+<!-- CL 406894 -->
+On Windows only, the mime package now ignores a registry entry
+recording that the extension `.js` should have MIME
+type `text/plain`. This is a common unintentional
+misconfiguration on Windows systems. The effect is
+that `.js` will have the default MIME
+type `text/javascript; charset=utf-8`.
+Applications that expect `text/plain` on Windows must
+now explicitly call
+[`AddExtensionType`](/pkg/mime/#AddExtensionType).
 
 <!-- mime -->
 
-[mime/multipart](/pkg/mime/multipart)
+#### [mime/multipart](/pkg/mime/multipart)
 
-:   <!-- https://go.dev/issue/59153 -->
-    <!-- CL 481985 -->
-    In Go 1.19.8 and later, this package sets limits the size
-    of the MIME data it processes to protect against malicious inputs.
-    `Reader.NextPart` and `Reader.NextRawPart` limit the
-    number of headers in a part to 10000 and `Reader.ReadForm` limits
-    the total number of headers in all `FileHeaders` to 10000.
-    These limits may be adjusted with the `GODEBUG=multipartmaxheaders`
-    setting.
-    `Reader.ReadForm` further limits the number of parts in a form to 1000.
-    This limit may be adjusted with the `GODEBUG=multipartmaxparts`
-    setting.
+<!-- https://go.dev/issue/59153 -->
+<!-- CL 481985 -->
+In Go 1.19.8 and later, this package sets limits the size
+of the MIME data it processes to protect against malicious inputs.
+`Reader.NextPart` and `Reader.NextRawPart` limit the
+number of headers in a part to 10000 and `Reader.ReadForm` limits
+the total number of headers in all `FileHeaders` to 10000.
+These limits may be adjusted with the `GODEBUG=multipartmaxheaders`
+setting.
+`Reader.ReadForm` further limits the number of parts in a form to 1000.
+This limit may be adjusted with the `GODEBUG=multipartmaxparts`
+setting.
 
 <!-- mime/multipart -->
 
-[net](/pkg/net/)
+#### [net](/pkg/net/)
 
-:   <!-- CL 386016 -->
-    The pure Go resolver will now use EDNS(0) to include a suggested
-    maximum reply packet length, permitting reply packets to contain
-    up to 1232 bytes (the previous maximum was 512).
-    In the unlikely event that this causes problems with a local DNS
-    resolver, setting the environment variable
-    `GODEBUG=netdns=cgo` to use the cgo-based resolver
-    should work.
-    Please report any such problems on [the
-    issue tracker](/issue/new).
+<!-- CL 386016 -->
+The pure Go resolver will now use EDNS(0) to include a suggested
+maximum reply packet length, permitting reply packets to contain
+up to 1232 bytes (the previous maximum was 512).
+In the unlikely event that this causes problems with a local DNS
+resolver, setting the environment variable
+`GODEBUG=netdns=cgo` to use the cgo-based resolver
+should work.
+Please report any such problems on [the
+issue tracker](/issue/new).
 
-    <!-- https://go.dev/issue/51428 -->
-    <!-- CL 396877 -->
-    When a net package function or method returns an "I/O timeout"
-    error, the error will now satisfy `errors.Is(err,
-      context.DeadlineExceeded)`. When a net package function
-    returns an "operation was canceled" error, the error will now
-    satisfy `errors.Is(err, context.Canceled)`.
-    These changes are intended to make it easier for code to test
-    for cases in which a context cancellation or timeout causes a net
-    package function or method to return an error, while preserving
-    backward compatibility for error messages.
+<!-- https://go.dev/issue/51428 -->
+<!-- CL 396877 -->
+When a net package function or method returns an "I/O timeout"
+error, the error will now satisfy `errors.Is(err,
+  context.DeadlineExceeded)`. When a net package function
+returns an "operation was canceled" error, the error will now
+satisfy `errors.Is(err, context.Canceled)`.
+These changes are intended to make it easier for code to test
+for cases in which a context cancellation or timeout causes a net
+package function or method to return an error, while preserving
+backward compatibility for error messages.
 
-    <!-- https://go.dev/issue/33097 -->
-    <!-- CL 400654 -->
-    [`Resolver.PreferGo`](/pkg/net/#Resolver.PreferGo)
-    is now implemented on Windows and Plan 9. It previously only worked on Unix
-    platforms. Combined with
-    [`Dialer.Resolver`](/pkg/net/#Dialer.Resolver) and
-    [`Resolver.Dial`](/pkg/net/#Resolver.Dial), it's now
-    possible to write portable programs and be in control of all DNS name lookups
-    when dialing.
+<!-- https://go.dev/issue/33097 -->
+<!-- CL 400654 -->
+[`Resolver.PreferGo`](/pkg/net/#Resolver.PreferGo)
+is now implemented on Windows and Plan 9. It previously only worked on Unix
+platforms. Combined with
+[`Dialer.Resolver`](/pkg/net/#Dialer.Resolver) and
+[`Resolver.Dial`](/pkg/net/#Resolver.Dial), it's now
+possible to write portable programs and be in control of all DNS name lookups
+when dialing.
 
-    The `net` package now has initial support for the `netgo`
-    build tag on Windows. When used, the package uses the Go DNS client (as used
-    by `Resolver.PreferGo`) instead of asking Windows for
-    DNS results. The upstream DNS server it discovers from Windows
-    may not yet be correct with complex system network configurations, however.
+The `net` package now has initial support for the `netgo`
+build tag on Windows. When used, the package uses the Go DNS client (as used
+by `Resolver.PreferGo`) instead of asking Windows for
+DNS results. The upstream DNS server it discovers from Windows
+may not yet be correct with complex system network configurations, however.
 
 <!-- net -->
 
-[net/http](/pkg/net/http/)
+#### [net/http](/pkg/net/http/)
 
-:   <!-- CL 269997 -->
-    [`ResponseWriter.WriteHeader`](/pkg/net/http/#ResponseWriter)
-    now supports sending user-defined 1xx informational headers.
+<!-- CL 269997 -->
+[`ResponseWriter.WriteHeader`](/pkg/net/http/#ResponseWriter)
+now supports sending user-defined 1xx informational headers.
 
-    <!-- CL 361397 -->
-    The `io.ReadCloser` returned by
-    [`MaxBytesReader`](/pkg/net/http/#MaxBytesReader)
-    will now return the defined error type
-    [`MaxBytesError`](/pkg/net/http/#MaxBytesError)
-    when its read limit is exceeded.
+<!-- CL 361397 -->
+The `io.ReadCloser` returned by
+[`MaxBytesReader`](/pkg/net/http/#MaxBytesReader)
+will now return the defined error type
+[`MaxBytesError`](/pkg/net/http/#MaxBytesError)
+when its read limit is exceeded.
 
-    <!-- CL 375354 -->
-    The HTTP client will handle a 3xx response without a
-    `Location` header by returning it to the caller,
-    rather than treating it as an error.
+<!-- CL 375354 -->
+The HTTP client will handle a 3xx response without a
+`Location` header by returning it to the caller,
+rather than treating it as an error.
 
 <!-- net/http -->
 
-[net/url](/pkg/net/url/)
+#### [net/url](/pkg/net/url/)
 
-:   <!-- CL 374654 -->
-    The new
-    [`JoinPath`](/pkg/net/url/#JoinPath)
-    function and
-    [`URL.JoinPath`](/pkg/net/url/#URL.JoinPath)
-    method create a new `URL` by joining a list of path
-    elements.
+<!-- CL 374654 -->
+The new
+[`JoinPath`](/pkg/net/url/#JoinPath)
+function and
+[`URL.JoinPath`](/pkg/net/url/#URL.JoinPath)
+method create a new `URL` by joining a list of path
+elements.
 
-    <!-- https://go.dev/issue/46059 -->
-    The `URL` type now distinguishes between URLs with no
-    authority and URLs with an empty authority. For example,
-    `http:///path` has an empty authority (host),
-    while `http:/path` has none.
+<!-- https://go.dev/issue/46059 -->
+The `URL` type now distinguishes between URLs with no
+authority and URLs with an empty authority. For example,
+`http:///path` has an empty authority (host),
+while `http:/path` has none.
 
-    The new [`URL`](/pkg/net/url/#URL) field
-    `OmitHost` is set to `true` when a
-    `URL` has an empty authority.
+The new [`URL`](/pkg/net/url/#URL) field
+`OmitHost` is set to `true` when a
+`URL` has an empty authority.
 
 <!-- net/url -->
 
-[os/exec](/pkg/os/exec/)
+#### [os/exec](/pkg/os/exec/)
 
-:   <!-- https://go.dev/issue/50599 -->
-    <!-- CL 401340 -->
-    A [`Cmd`](/pkg/os/exec/#Cmd) with a non-empty `Dir` field
-    and nil `Env` now implicitly sets the `PWD` environment
-    variable for the subprocess to match `Dir`.
+<!-- https://go.dev/issue/50599 -->
+<!-- CL 401340 -->
+A [`Cmd`](/pkg/os/exec/#Cmd) with a non-empty `Dir` field
+and nil `Env` now implicitly sets the `PWD` environment
+variable for the subprocess to match `Dir`.
 
-    The new method [`Cmd.Environ`](/pkg/os/exec/#Cmd.Environ) reports the
-    environment that would be used to run the command, including the
-    implicitly set `PWD` variable.
+The new method [`Cmd.Environ`](/pkg/os/exec/#Cmd.Environ) reports the
+environment that would be used to run the command, including the
+implicitly set `PWD` variable.
 
 <!-- os/exec -->
 
-[reflect](/pkg/reflect/)
+#### [reflect](/pkg/reflect/)
 
-:   <!-- https://go.dev/issue/47066 -->
-    <!-- CL 357331 -->
-    The method [`Value.Bytes`](/pkg/reflect/#Value.Bytes)
-    now accepts addressable arrays in addition to slices.
+<!-- https://go.dev/issue/47066 -->
+<!-- CL 357331 -->
+The method [`Value.Bytes`](/pkg/reflect/#Value.Bytes)
+now accepts addressable arrays in addition to slices.
 
-    <!-- CL 400954 -->
-    The methods [`Value.Len`](/pkg/reflect/#Value.Len)
-    and [`Value.Cap`](/pkg/reflect/#Value.Cap)
-    now successfully operate on a pointer to an array and return the length of that array,
-    to match what the [builtin
-    `len` and `cap` functions do](/ref/spec#Length_and_capacity).
+<!-- CL 400954 -->
+The methods [`Value.Len`](/pkg/reflect/#Value.Len)
+and [`Value.Cap`](/pkg/reflect/#Value.Cap)
+now successfully operate on a pointer to an array and return the length of that array,
+to match what the [builtin
+`len` and `cap` functions do](/ref/spec#Length_and_capacity).
 
 <!-- reflect -->
 
-[regexp/syntax](/pkg/regexp/syntax/)
+#### [regexp/syntax](/pkg/regexp/syntax/)
 
-:   <!-- https://go.dev/issue/51684 -->
-    <!-- CL 401076 -->
-    Go 1.18 release candidate 1, Go 1.17.8, and Go 1.16.15 included a security fix
-    to the regular expression parser, making it reject very deeply nested expressions.
-    Because Go patch releases do not introduce new API,
-    the parser returned [`syntax.ErrInternalError`](/pkg/regexp/syntax/#ErrInternalError) in this case.
-    Go 1.19 adds a more specific error, [`syntax.ErrNestingDepth`](/pkg/regexp/syntax/#ErrNestingDepth),
-    which the parser now returns instead.
+<!-- https://go.dev/issue/51684 -->
+<!-- CL 401076 -->
+Go 1.18 release candidate 1, Go 1.17.8, and Go 1.16.15 included a security fix
+to the regular expression parser, making it reject very deeply nested expressions.
+Because Go patch releases do not introduce new API,
+the parser returned [`syntax.ErrInternalError`](/pkg/regexp/syntax/#ErrInternalError) in this case.
+Go 1.19 adds a more specific error, [`syntax.ErrNestingDepth`](/pkg/regexp/syntax/#ErrNestingDepth),
+which the parser now returns instead.
 
 <!-- regexp -->
 
-[runtime](/pkg/runtime/)
+#### [runtime](/pkg/runtime/)
 
-:   <!-- https://go.dev/issue/51461 -->
-    The [`GOROOT`](/pkg/runtime/#GOROOT) function now returns the empty string
-    (instead of `"go"`) when the binary was built with
-    the `-trimpath` flag set and the `GOROOT`
-    variable is not set in the process environment.
+<!-- https://go.dev/issue/51461 -->
+The [`GOROOT`](/pkg/runtime/#GOROOT) function now returns the empty string
+(instead of `"go"`) when the binary was built with
+the `-trimpath` flag set and the `GOROOT`
+variable is not set in the process environment.
 
 <!-- runtime -->
 
-[runtime/metrics](/pkg/runtime/metrics/)
+#### [runtime/metrics](/pkg/runtime/metrics/)
 
-:   <!-- https://go.dev/issue/47216 -->
-    <!-- CL 404305 -->
-    The new `/sched/gomaxprocs:threads`
-    [metric](/pkg/runtime/metrics/#hdr-Supported_metrics) reports
-    the current
-    [`runtime.GOMAXPROCS`](/pkg/runtime/#GOMAXPROCS)
-    value.
+<!-- https://go.dev/issue/47216 -->
+<!-- CL 404305 -->
+The new `/sched/gomaxprocs:threads`
+[metric](/pkg/runtime/metrics/#hdr-Supported_metrics) reports
+the current
+[`runtime.GOMAXPROCS`](/pkg/runtime/#GOMAXPROCS)
+value.
 
-    <!-- https://go.dev/issue/47216 -->
-    <!-- CL 404306 -->
-    The new `/cgo/go-to-c-calls:calls`
-    [metric](/pkg/runtime/metrics/#hdr-Supported_metrics)
-    reports the total number of calls made from Go to C. This metric is
-    identical to the
-    [`runtime.NumCgoCall`](/pkg/runtime/#NumCgoCall)
-    function.
+<!-- https://go.dev/issue/47216 -->
+<!-- CL 404306 -->
+The new `/cgo/go-to-c-calls:calls`
+[metric](/pkg/runtime/metrics/#hdr-Supported_metrics)
+reports the total number of calls made from Go to C. This metric is
+identical to the
+[`runtime.NumCgoCall`](/pkg/runtime/#NumCgoCall)
+function.
 
-    <!-- https://go.dev/issue/48409 -->
-    <!-- CL 403614 -->
-    The new `/gc/limiter/last-enabled:gc-cycle`
-    [metric](/pkg/runtime/metrics/#hdr-Supported_metrics)
-    reports the last GC cycle when the GC CPU limiter was enabled. See the
-    [runtime notes](#runtime) for details about the GC CPU limiter.
+<!-- https://go.dev/issue/48409 -->
+<!-- CL 403614 -->
+The new `/gc/limiter/last-enabled:gc-cycle`
+[metric](/pkg/runtime/metrics/#hdr-Supported_metrics)
+reports the last GC cycle when the GC CPU limiter was enabled. See the
+[runtime notes](#runtime) for details about the GC CPU limiter.
 
 <!-- runtime/metrics -->
 
-[runtime/pprof](/pkg/runtime/pprof/)
+#### [runtime/pprof](/pkg/runtime/pprof/)
 
-:   <!-- https://go.dev/issue/33250 -->
-    <!-- CL 387415 -->
-    Stop-the-world pause times have been significantly reduced when
-    collecting goroutine profiles, reducing the overall latency impact to the
-    application.
+<!-- https://go.dev/issue/33250 -->
+<!-- CL 387415 -->
+Stop-the-world pause times have been significantly reduced when
+collecting goroutine profiles, reducing the overall latency impact to the
+application.
 
-    <!-- CL 391434 -->
-    `MaxRSS` is now reported in heap profiles for all Unix
-    operating systems (it was previously only reported for
-    `GOOS=android`, `darwin`, `ios`, and
-    `linux`).
+<!-- CL 391434 -->
+`MaxRSS` is now reported in heap profiles for all Unix
+operating systems (it was previously only reported for
+`GOOS=android`, `darwin`, `ios`, and
+`linux`).
 
 <!-- runtime/pprof -->
 
-[runtime/race](/pkg/runtime/race/)
+#### [runtime/race](/pkg/runtime/race/)
 
-:   <!-- https://go.dev/issue/49761 -->
-    <!-- CL 333529 -->
-    The race detector has been upgraded to use thread sanitizer
-    version v3 on all supported platforms
-    except `windows/amd64`
-    and `openbsd/amd64`, which remain on v2.
-    Compared to v2, it is now typically 1.5x to 2x faster, uses half
-    as much memory, and it supports an unlimited number of
-    goroutines.
-    On Linux, the race detector now requires at least glibc version
-    2.17 and GNU binutils 2.26.
+<!-- https://go.dev/issue/49761 -->
+<!-- CL 333529 -->
+The race detector has been upgraded to use thread sanitizer
+version v3 on all supported platforms
+except `windows/amd64`
+and `openbsd/amd64`, which remain on v2.
+Compared to v2, it is now typically 1.5x to 2x faster, uses half
+as much memory, and it supports an unlimited number of
+goroutines.
+On Linux, the race detector now requires at least glibc version
+2.17 and GNU binutils 2.26.
 
-    <!-- CL 336549 -->
-    The race detector is now supported on `GOARCH=s390x`.
+<!-- CL 336549 -->
+The race detector is now supported on `GOARCH=s390x`.
 
-    <!-- https://go.dev/issue/52090 -->
-    Race detector support for `openbsd/amd64` has been
-    removed from thread sanitizer upstream, so it is unlikely to
-    ever be updated from v2.
+<!-- https://go.dev/issue/52090 -->
+Race detector support for `openbsd/amd64` has been
+removed from thread sanitizer upstream, so it is unlikely to
+ever be updated from v2.
 
 <!-- runtime/race -->
 
-[runtime/trace](/pkg/runtime/trace/)
+#### [runtime/trace](/pkg/runtime/trace/)
 
-:   <!-- CL 400795 -->
-    When tracing and the
-    [CPU profiler](/pkg/runtime/pprof/#StartCPUProfile) are
-    enabled simultaneously, the execution trace includes CPU profile
-    samples as instantaneous events.
+<!-- CL 400795 -->
+When tracing and the
+[CPU profiler](/pkg/runtime/pprof/#StartCPUProfile) are
+enabled simultaneously, the execution trace includes CPU profile
+samples as instantaneous events.
 
 <!-- runtime/trace -->
 
-[sort](/pkg/sort/)
+#### [sort](/pkg/sort/)
 
-:   <!-- CL 371574 -->
-    The sorting algorithm has been rewritten to use
-    [pattern-defeating quicksort](https://arxiv.org/pdf/2106.05123.pdf), which
-    is faster for several common scenarios.
+<!-- CL 371574 -->
+The sorting algorithm has been rewritten to use
+[pattern-defeating quicksort](https://arxiv.org/pdf/2106.05123.pdf), which
+is faster for several common scenarios.
 
-    <!-- https://go.dev/issue/50340 -->
-    <!-- CL 396514 -->
-    The new function
-    [`Find`](/pkg/sort/#Find)
-    is like
-    [`Search`](/pkg/sort/#Search)
-    but often easier to use: it returns an additional boolean reporting whether an equal value was found.
+<!-- https://go.dev/issue/50340 -->
+<!-- CL 396514 -->
+The new function
+[`Find`](/pkg/sort/#Find)
+is like
+[`Search`](/pkg/sort/#Search)
+but often easier to use: it returns an additional boolean reporting whether an equal value was found.
 
 <!-- sort -->
 
-[strconv](/pkg/strconv/)
+#### [strconv](/pkg/strconv/)
 
-:   <!-- CL 397255 -->
-    [`Quote`](/pkg/strconv/#Quote)
-    and related functions now quote the rune U+007F as `\x7f`,
-    not `\u007f`,
-    for consistency with other ASCII values.
+<!-- CL 397255 -->
+[`Quote`](/pkg/strconv/#Quote)
+and related functions now quote the rune U+007F as `\x7f`,
+not `\u007f`,
+for consistency with other ASCII values.
 
 <!-- strconv -->
 
-[syscall](/pkg/syscall/)
+#### [syscall](/pkg/syscall/)
 
-:   <!-- https://go.dev/issue/51192 -->
-    <!-- CL 385796 -->
-    On PowerPC (`GOARCH=ppc64`, `ppc64le`),
-    [`Syscall`](/pkg/syscall/#Syscall),
-    [`Syscall6`](/pkg/syscall/#Syscall6),
-    [`RawSyscall`](/pkg/syscall/#RawSyscall), and
-    [`RawSyscall6`](/pkg/syscall/#RawSyscall6)
-    now always return 0 for return value `r2` instead of an
-    undefined value.
+<!-- https://go.dev/issue/51192 -->
+<!-- CL 385796 -->
+On PowerPC (`GOARCH=ppc64`, `ppc64le`),
+[`Syscall`](/pkg/syscall/#Syscall),
+[`Syscall6`](/pkg/syscall/#Syscall6),
+[`RawSyscall`](/pkg/syscall/#RawSyscall), and
+[`RawSyscall6`](/pkg/syscall/#RawSyscall6)
+now always return 0 for return value `r2` instead of an
+undefined value.
 
-    <!-- CL 391434 -->
-    On AIX and Solaris, [`Getrusage`](/pkg/syscall/#Getrusage) is now defined.
+<!-- CL 391434 -->
+On AIX and Solaris, [`Getrusage`](/pkg/syscall/#Getrusage) is now defined.
 
 <!-- syscall -->
 
-[time](/pkg/time/)
+#### [time](/pkg/time/)
 
-:   <!-- https://go.dev/issue/51414 -->
-    <!-- CL 393515 -->
-    The new method
-    [`Duration.Abs`](/pkg/time/#Duration.Abs)
-    provides a convenient and safe way to take the absolute value of a duration,
-    converting −2⁶³ to 2⁶³−1.
-    (This boundary case can happen as the result of subtracting a recent time from the zero time.)
+<!-- https://go.dev/issue/51414 -->
+<!-- CL 393515 -->
+The new method
+[`Duration.Abs`](/pkg/time/#Duration.Abs)
+provides a convenient and safe way to take the absolute value of a duration,
+converting −2⁶³ to 2⁶³−1.
+(This boundary case can happen as the result of subtracting a recent time from the zero time.)
 
-    <!-- https://go.dev/issue/50062 -->
-    <!-- CL 405374 -->
-    The new method
-    [`Time.ZoneBounds`](/pkg/time/#Time.ZoneBounds)
-    returns the start and end times of the time zone in effect at a given time.
-    It can be used in a loop to enumerate all the known time zone transitions at a given location.
+<!-- https://go.dev/issue/50062 -->
+<!-- CL 405374 -->
+The new method
+[`Time.ZoneBounds`](/pkg/time/#Time.ZoneBounds)
+returns the start and end times of the time zone in effect at a given time.
+It can be used in a loop to enumerate all the known time zone transitions at a given location.
 
 <!-- time -->
 
diff --git a/_content/doc/go1.20.md b/_content/doc/go1.20.md
index 5229808..3d56a02 100644
--- a/_content/doc/go1.20.md
+++ b/_content/doc/go1.20.md
@@ -460,659 +460,659 @@
 in mind.
 There are also various performance improvements, not enumerated here.
 
-[archive/tar](/pkg/archive/tar/)
+#### [archive/tar](/pkg/archive/tar/)
 
-:   <!-- https://go.dev/issue/55356, CL 449937 -->
-    When the `GODEBUG=tarinsecurepath=0` environment variable is set,
-    [`Reader.Next`](/pkg/archive/tar/#Reader.Next) method
-    will now return the error [`ErrInsecurePath`](/pkg/archive/tar/#ErrInsecurePath)
-    for an entry with a file name that is an absolute path,
-    refers to a location outside the current directory, contains invalid
-    characters, or (on Windows) is a reserved name such as `NUL`.
-    A future version of Go may disable insecure paths by default.
+<!-- https://go.dev/issue/55356, CL 449937 -->
+When the `GODEBUG=tarinsecurepath=0` environment variable is set,
+[`Reader.Next`](/pkg/archive/tar/#Reader.Next) method
+will now return the error [`ErrInsecurePath`](/pkg/archive/tar/#ErrInsecurePath)
+for an entry with a file name that is an absolute path,
+refers to a location outside the current directory, contains invalid
+characters, or (on Windows) is a reserved name such as `NUL`.
+A future version of Go may disable insecure paths by default.
 
 <!-- archive/tar -->
 
-[archive/zip](/pkg/archive/zip/)
+#### [archive/zip](/pkg/archive/zip/)
 
-:   <!-- https://go.dev/issue/55356 -->
-    When the `GODEBUG=zipinsecurepath=0` environment variable is set,
-    [`NewReader`](/pkg/archive/zip/#NewReader) will now return the error
-    [`ErrInsecurePath`](/pkg/archive/zip/#ErrInsecurePath)
-    when opening an archive which contains any file name that is an absolute path,
-    refers to a location outside the current directory, contains invalid
-    characters, or (on Windows) is a reserved names such as `NUL`.
-    A future version of Go may disable insecure paths by default.
+<!-- https://go.dev/issue/55356 -->
+When the `GODEBUG=zipinsecurepath=0` environment variable is set,
+[`NewReader`](/pkg/archive/zip/#NewReader) will now return the error
+[`ErrInsecurePath`](/pkg/archive/zip/#ErrInsecurePath)
+when opening an archive which contains any file name that is an absolute path,
+refers to a location outside the current directory, contains invalid
+characters, or (on Windows) is a reserved names such as `NUL`.
+A future version of Go may disable insecure paths by default.
 
-    <!-- CL 449955 -->
-    Reading from a directory file that contains file data will now return an error.
-    The zip specification does not permit directory files to contain file data,
-    so this change only affects reading from invalid archives.
+<!-- CL 449955 -->
+Reading from a directory file that contains file data will now return an error.
+The zip specification does not permit directory files to contain file data,
+so this change only affects reading from invalid archives.
 
 <!-- archive/zip -->
 
-[bytes](/pkg/bytes/)
+#### [bytes](/pkg/bytes/)
 
-:   <!-- CL 407176 -->
-    The new
-    [`CutPrefix`](/pkg/bytes/#CutPrefix) and
-    [`CutSuffix`](/pkg/bytes/#CutSuffix) functions
-    are like [`TrimPrefix`](/pkg/bytes/#TrimPrefix)
-    and [`TrimSuffix`](/pkg/bytes/#TrimSuffix)
-    but also report whether the string was trimmed.
+<!-- CL 407176 -->
+The new
+[`CutPrefix`](/pkg/bytes/#CutPrefix) and
+[`CutSuffix`](/pkg/bytes/#CutSuffix) functions
+are like [`TrimPrefix`](/pkg/bytes/#TrimPrefix)
+and [`TrimSuffix`](/pkg/bytes/#TrimSuffix)
+but also report whether the string was trimmed.
 
-    <!-- CL 359675, https://go.dev/issue/45038 -->
-    The new [`Clone`](/pkg/bytes/#Clone) function
-    allocates a copy of a byte slice.
+<!-- CL 359675, https://go.dev/issue/45038 -->
+The new [`Clone`](/pkg/bytes/#Clone) function
+allocates a copy of a byte slice.
 
 <!-- bytes -->
 
-[context](/pkg/context/)
+#### [context](/pkg/context/)
 
-:   <!-- https://go.dev/issue/51365, CL 375977 -->
-    The new [`WithCancelCause`](/pkg/context/#WithCancelCause) function
-    provides a way to cancel a context with a given error.
-    That error can be retrieved by calling the new [`Cause`](/pkg/context/#Cause) function.
+<!-- https://go.dev/issue/51365, CL 375977 -->
+The new [`WithCancelCause`](/pkg/context/#WithCancelCause) function
+provides a way to cancel a context with a given error.
+That error can be retrieved by calling the new [`Cause`](/pkg/context/#Cause) function.
 
 <!-- context -->
 
-[crypto/ecdsa](/pkg/crypto/ecdsa/)
+#### [crypto/ecdsa](/pkg/crypto/ecdsa/)
 
-:   <!-- CL 353849 -->
-    When using supported curves, all operations are now implemented in constant time.
-    This led to an increase in CPU time between 5% and 30%, mostly affecting P-384 and P-521.
+<!-- CL 353849 -->
+When using supported curves, all operations are now implemented in constant time.
+This led to an increase in CPU time between 5% and 30%, mostly affecting P-384 and P-521.
 
-    <!-- https://go.dev/issue/56088, CL 450816 -->
-    The new [`PrivateKey.ECDH`](/pkg/crypto/ecdsa/#PrivateKey.ECDH) method
-    converts an `ecdsa.PrivateKey` to an `ecdh.PrivateKey`.
+<!-- https://go.dev/issue/56088, CL 450816 -->
+The new [`PrivateKey.ECDH`](/pkg/crypto/ecdsa/#PrivateKey.ECDH) method
+converts an `ecdsa.PrivateKey` to an `ecdh.PrivateKey`.
 
 <!-- crypto/ecdsa -->
 
-[crypto/ed25519](/pkg/crypto/ed25519/)
+#### [crypto/ed25519](/pkg/crypto/ed25519/)
 
-:   <!-- CL 373076, CL 404274, https://go.dev/issue/31804 -->
-    The [`PrivateKey.Sign`](/pkg/crypto/ed25519/#PrivateKey.Sign) method
-    and the
-    [`VerifyWithOptions`](/pkg/crypto/ed25519/#VerifyWithOptions) function
-    now support signing pre-hashed messages with Ed25519ph,
-    indicated by an
-    [`Options.HashFunc`](/pkg/crypto/ed25519/#Options.HashFunc)
-    that returns
-    [`crypto.SHA512`](/pkg/crypto/#SHA512).
-    They also now support Ed25519ctx and Ed25519ph with context,
-    indicated by setting the new
-    [`Options.Context`](/pkg/crypto/ed25519/#Options.Context)
-    field.
+<!-- CL 373076, CL 404274, https://go.dev/issue/31804 -->
+The [`PrivateKey.Sign`](/pkg/crypto/ed25519/#PrivateKey.Sign) method
+and the
+[`VerifyWithOptions`](/pkg/crypto/ed25519/#VerifyWithOptions) function
+now support signing pre-hashed messages with Ed25519ph,
+indicated by an
+[`Options.HashFunc`](/pkg/crypto/ed25519/#Options.HashFunc)
+that returns
+[`crypto.SHA512`](/pkg/crypto/#SHA512).
+They also now support Ed25519ctx and Ed25519ph with context,
+indicated by setting the new
+[`Options.Context`](/pkg/crypto/ed25519/#Options.Context)
+field.
 
 <!-- crypto/ed25519 -->
 
-[crypto/rsa](/pkg/crypto/rsa/)
+#### [crypto/rsa](/pkg/crypto/rsa/)
 
-:   <!-- CL 418874, https://go.dev/issue/19974 -->
-    The new field [`OAEPOptions.MGFHash`](/pkg/crypto/rsa/#OAEPOptions.MGFHash)
-    allows configuring the MGF1 hash separately for OAEP decryption.
+<!-- CL 418874, https://go.dev/issue/19974 -->
+The new field [`OAEPOptions.MGFHash`](/pkg/crypto/rsa/#OAEPOptions.MGFHash)
+allows configuring the MGF1 hash separately for OAEP decryption.
 
-    <!-- https://go.dev/issue/20654 -->
-    crypto/rsa now uses a new, safer, constant-time backend. This causes a CPU
-    runtime increase for decryption operations between approximately 15%
-    (RSA-2048 on amd64) and 45% (RSA-4096 on arm64), and more on 32-bit architectures.
-    Encryption operations are approximately 20x slower than before (but still 5-10x faster than decryption).
-    Performance is expected to improve in future releases.
-    Programs must not modify or manually generate the fields of
-    [`PrecomputedValues`](/pkg/crypto/rsa/#PrecomputedValues).
+<!-- https://go.dev/issue/20654 -->
+crypto/rsa now uses a new, safer, constant-time backend. This causes a CPU
+runtime increase for decryption operations between approximately 15%
+(RSA-2048 on amd64) and 45% (RSA-4096 on arm64), and more on 32-bit architectures.
+Encryption operations are approximately 20x slower than before (but still 5-10x faster than decryption).
+Performance is expected to improve in future releases.
+Programs must not modify or manually generate the fields of
+[`PrecomputedValues`](/pkg/crypto/rsa/#PrecomputedValues).
 
 <!-- crypto/rsa -->
 
-[crypto/subtle](/pkg/crypto/subtle/)
+#### [crypto/subtle](/pkg/crypto/subtle/)
 
-:   <!-- https://go.dev/issue/53021, CL 421435 -->
-    The new function [`XORBytes`](/pkg/crypto/subtle/#XORBytes)
-    XORs two byte slices together.
+<!-- https://go.dev/issue/53021, CL 421435 -->
+The new function [`XORBytes`](/pkg/crypto/subtle/#XORBytes)
+XORs two byte slices together.
 
 <!-- crypto/subtle -->
 
-[crypto/tls](/pkg/crypto/tls/)
+#### [crypto/tls](/pkg/crypto/tls/)
 
-:   <!-- CL 426455, CL 427155, CL 426454, https://go.dev/issue/46035 -->
-    Parsed certificates are now shared across all clients actively using that certificate.
-    The memory 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.
+<!-- CL 426455, CL 427155, CL 426454, https://go.dev/issue/46035 -->
+Parsed certificates are now shared across all clients actively using that certificate.
+The memory 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.
 
-    <!-- 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
-    [`CertificateVerificationError`](/pkg/crypto/tls/#CertificateVerificationError),
-    which includes the presented certificates.
+<!-- 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
+[`CertificateVerificationError`](/pkg/crypto/tls/#CertificateVerificationError),
+which includes the presented certificates.
 
 <!-- crypto/tls -->
 
-[crypto/x509](/pkg/crypto/x509/)
+#### [crypto/x509](/pkg/crypto/x509/)
 
-:   <!-- CL 450816, CL 450815 -->
-    [`ParsePKCS8PrivateKey`](/pkg/crypto/x509/#ParsePKCS8PrivateKey)
-    and
-    [`MarshalPKCS8PrivateKey`](/pkg/crypto/x509/#MarshalPKCS8PrivateKey)
-    now support keys of type [`*crypto/ecdh.PrivateKey`](/pkg/crypto/ecdh.PrivateKey).
-    [`ParsePKIXPublicKey`](/pkg/crypto/x509/#ParsePKIXPublicKey)
-    and
-    [`MarshalPKIXPublicKey`](/pkg/crypto/x509/#MarshalPKIXPublicKey)
-    now support keys of type [`*crypto/ecdh.PublicKey`](/pkg/crypto/ecdh.PublicKey).
-    Parsing NIST curve keys still returns values of type
-    `*ecdsa.PublicKey` and `*ecdsa.PrivateKey`.
-    Use their new `ECDH` methods to convert to the `crypto/ecdh` types.
+<!-- CL 450816, CL 450815 -->
+[`ParsePKCS8PrivateKey`](/pkg/crypto/x509/#ParsePKCS8PrivateKey)
+and
+[`MarshalPKCS8PrivateKey`](/pkg/crypto/x509/#MarshalPKCS8PrivateKey)
+now support keys of type [`*crypto/ecdh.PrivateKey`](/pkg/crypto/ecdh.PrivateKey).
+[`ParsePKIXPublicKey`](/pkg/crypto/x509/#ParsePKIXPublicKey)
+and
+[`MarshalPKIXPublicKey`](/pkg/crypto/x509/#MarshalPKIXPublicKey)
+now support keys of type [`*crypto/ecdh.PublicKey`](/pkg/crypto/ecdh.PublicKey).
+Parsing NIST curve keys still returns values of type
+`*ecdsa.PublicKey` and `*ecdsa.PrivateKey`.
+Use their new `ECDH` methods to convert to the `crypto/ecdh` types.
 
-    <!-- CL 449235 -->
-    The new [`SetFallbackRoots`](/pkg/crypto/x509/#SetFallbackRoots)
-    function allows a program to define a set of fallback root certificates in case an
-    operating system verifier or standard platform root bundle is unavailable at runtime.
-    It will most commonly be used with a new package, [golang.org/x/crypto/x509roots/fallback](/pkg/golang.org/x/crypto/x509roots/fallback),
-    which will provide an up to date root bundle.
+<!-- CL 449235 -->
+The new [`SetFallbackRoots`](/pkg/crypto/x509/#SetFallbackRoots)
+function allows a program to define a set of fallback root certificates in case an
+operating system verifier or standard platform root bundle is unavailable at runtime.
+It will most commonly be used with a new package, [golang.org/x/crypto/x509roots/fallback](/pkg/golang.org/x/crypto/x509roots/fallback),
+which will provide an up to date root bundle.
 
 <!-- crypto/x509 -->
 
-[debug/elf](/pkg/debug/elf/)
+#### [debug/elf](/pkg/debug/elf/)
 
-:   <!-- CL 429601 -->
-    Attempts to read from a `SHT_NOBITS` section using
-    [`Section.Data`](/pkg/debug/elf/#Section.Data)
-    or the reader returned by [`Section.Open`](/pkg/debug/elf/#Section.Open)
-    now return an error.
+<!-- CL 429601 -->
+Attempts to read from a `SHT_NOBITS` section using
+[`Section.Data`](/pkg/debug/elf/#Section.Data)
+or the reader returned by [`Section.Open`](/pkg/debug/elf/#Section.Open)
+now return an error.
 
-    <!-- CL 420982 -->
-    Additional [`R_LARCH_*`](/pkg/debug/elf/#R_LARCH) constants are defined for use with LoongArch systems.
+<!-- CL 420982 -->
+Additional [`R_LARCH_*`](/pkg/debug/elf/#R_LARCH) constants are defined for use with LoongArch systems.
 
-    <!-- CL 420982, CL 435415, CL 425555 -->
-    Additional [`R_PPC64_*`](/pkg/debug/elf/#R_PPC64) constants are defined for use with PPC64 ELFv2 relocations.
+<!-- CL 420982, CL 435415, CL 425555 -->
+Additional [`R_PPC64_*`](/pkg/debug/elf/#R_PPC64) constants are defined for use with PPC64 ELFv2 relocations.
 
-    <!-- CL 411915 -->
-    The constant value for [`R_PPC64_SECTOFF_LO_DS`](/pkg/debug/elf/#R_PPC64_SECTOFF_LO_DS) is corrected, from 61 to 62.
+<!-- CL 411915 -->
+The constant value for [`R_PPC64_SECTOFF_LO_DS`](/pkg/debug/elf/#R_PPC64_SECTOFF_LO_DS) is corrected, from 61 to 62.
 
 <!-- debug/elf -->
 
-[debug/gosym](/pkg/debug/gosym/)
+#### [debug/gosym](/pkg/debug/gosym/)
 
-:   <!-- https://go.dev/issue/37762, CL 317917 -->
-    Due to a change of [Go's symbol naming conventions](#linker), tools that
-    process Go binaries should use Go 1.20's `debug/gosym` package to
-    transparently handle both old and new binaries.
+<!-- https://go.dev/issue/37762, CL 317917 -->
+Due to a change of [Go's symbol naming conventions](#linker), tools that
+process Go binaries should use Go 1.20's `debug/gosym` package to
+transparently handle both old and new binaries.
 
 <!-- debug/gosym -->
 
-[debug/pe](/pkg/debug/pe/)
+#### [debug/pe](/pkg/debug/pe/)
 
-:   <!-- CL 421357 -->
-    Additional [`IMAGE_FILE_MACHINE_RISCV*`](/pkg/debug/pe/#IMAGE_FILE_MACHINE_RISCV128) constants are defined for use with RISC-V systems.
+<!-- CL 421357 -->
+Additional [`IMAGE_FILE_MACHINE_RISCV*`](/pkg/debug/pe/#IMAGE_FILE_MACHINE_RISCV128) constants are defined for use with RISC-V systems.
 
 <!-- debug/pe -->
 
-[encoding/binary](/pkg/encoding/binary/)
+#### [encoding/binary](/pkg/encoding/binary/)
 
-:   <!-- CL 420274 -->
-    The [`ReadVarint`](/pkg/encoding/binary/#ReadVarint) and
-    [`ReadUvarint`](/pkg/encoding/binary/#ReadUvarint)
-    functions will now return `io.ErrUnexpectedEOF` after reading a partial value,
-    rather than `io.EOF`.
+<!-- CL 420274 -->
+The [`ReadVarint`](/pkg/encoding/binary/#ReadVarint) and
+[`ReadUvarint`](/pkg/encoding/binary/#ReadUvarint)
+functions will now return `io.ErrUnexpectedEOF` after reading a partial value,
+rather than `io.EOF`.
 
 <!-- encoding/binary -->
 
-[encoding/xml](/pkg/encoding/xml/)
+#### [encoding/xml](/pkg/encoding/xml/)
 
-:   <!-- https://go.dev/issue/53346, CL 424777 -->
-    The new [`Encoder.Close`](/pkg/encoding/xml/#Encoder.Close) method
-    can be used to check for unclosed elements when finished encoding.
+<!-- https://go.dev/issue/53346, CL 424777 -->
+The new [`Encoder.Close`](/pkg/encoding/xml/#Encoder.Close) method
+can be used to check for unclosed elements when finished encoding.
 
-    <!-- CL 103875, CL 105636 -->
-    The decoder now rejects element and attribute names with more than one colon,
-    such as `<a:b:c>`,
-    as well as namespaces that resolve to an empty string, such as `xmlns:a=""`.
+<!-- CL 103875, CL 105636 -->
+The decoder now rejects element and attribute names with more than one colon,
+such as `<a:b:c>`,
+as well as namespaces that resolve to an empty string, such as `xmlns:a=""`.
 
-    <!-- CL 107255 -->
-    The decoder now rejects elements that use different namespace prefixes in the opening and closing tag,
-    even if those prefixes both denote the same namespace.
+<!-- CL 107255 -->
+The decoder now rejects elements that use different namespace prefixes in the opening and closing tag,
+even if those prefixes both denote the same namespace.
 
 <!-- encoding/xml -->
 
-[errors](/pkg/errors/)
+#### [errors](/pkg/errors/)
 
-:   <!-- https://go.dev/issue/53435 -->
-    The new [`Join`](/pkg/errors/#Join) function returns an error wrapping a list of errors.
+<!-- https://go.dev/issue/53435 -->
+The new [`Join`](/pkg/errors/#Join) function returns an error wrapping a list of errors.
 
 <!-- errors -->
 
-[fmt](/pkg/fmt/)
+#### [fmt](/pkg/fmt/)
 
-:   <!-- https://go.dev/issue/53435 -->
-    The [`Errorf`](/pkg/fmt/#Errorf) function supports multiple occurrences of
-    the `%w` format verb, returning an error that unwraps to the list of all arguments to `%w`.
+<!-- https://go.dev/issue/53435 -->
+The [`Errorf`](/pkg/fmt/#Errorf) function supports multiple occurrences of
+the `%w` format verb, returning an error that unwraps to the list of all arguments to `%w`.
 
-    <!-- https://go.dev/issue/51668, CL 400875 -->
-    The new [`FormatString`](/pkg/fmt/#FormatString) function recovers the
-    formatting directive corresponding to a [`State`](/pkg/fmt/#State),
-    which can be useful in [`Formatter`](/pkg/fmt/#Formatter).
-    implementations.
+<!-- https://go.dev/issue/51668, CL 400875 -->
+The new [`FormatString`](/pkg/fmt/#FormatString) function recovers the
+formatting directive corresponding to a [`State`](/pkg/fmt/#State),
+which can be useful in [`Formatter`](/pkg/fmt/#Formatter).
+implementations.
 
 <!-- fmt -->
 
-[go/ast](/pkg/go/ast/)
+#### [go/ast](/pkg/go/ast/)
 
-:   <!-- CL 426091, https://go.dev/issue/50429 -->
-    The new [`RangeStmt.Range`](/pkg/go/ast/#RangeStmt.Range) field
-    records the position of the `range` keyword in a range statement.
+<!-- CL 426091, https://go.dev/issue/50429 -->
+The new [`RangeStmt.Range`](/pkg/go/ast/#RangeStmt.Range) field
+records the position of the `range` keyword in a range statement.
 
-    <!-- CL 427955, https://go.dev/issue/53202 -->
-    The new [`File.FileStart`](/pkg/go/ast/#File.FileStart)
-    and [`File.FileEnd`](/pkg/go/ast/#File.FileEnd) fields
-    record the position of the start and end of the entire source file.
+<!-- CL 427955, https://go.dev/issue/53202 -->
+The new [`File.FileStart`](/pkg/go/ast/#File.FileStart)
+and [`File.FileEnd`](/pkg/go/ast/#File.FileEnd) fields
+record the position of the start and end of the entire source file.
 
 <!-- go/ast -->
 
-[go/token](/pkg/go/token/)
+#### [go/token](/pkg/go/token/)
 
-:   <!-- CL 410114, https://go.dev/issue/53200 -->
-    The new [`FileSet.RemoveFile`](/pkg/go/token/#FileSet.RemoveFile) method
-    removes a file from a `FileSet`.
-    Long-running programs can use this to release memory associated
-    with files they no longer need.
+<!-- CL 410114, https://go.dev/issue/53200 -->
+The new [`FileSet.RemoveFile`](/pkg/go/token/#FileSet.RemoveFile) method
+removes a file from a `FileSet`.
+Long-running programs can use this to release memory associated
+with files they no longer need.
 
 <!-- go/token -->
 
-[go/types](/pkg/go/types/)
+#### [go/types](/pkg/go/types/)
 
-:   <!-- CL 454575 -->
-    The new [`Satisfies`](/pkg/go/types/#Satisfies) function reports
-    whether a type satisfies a constraint.
-    This change aligns with the [new language semantics](#language)
-    that distinguish satisfying a constraint from implementing an interface.
+<!-- CL 454575 -->
+The new [`Satisfies`](/pkg/go/types/#Satisfies) function reports
+whether a type satisfies a constraint.
+This change aligns with the [new language semantics](#language)
+that distinguish satisfying a constraint from implementing an interface.
 
 <!-- go/types -->
 
-[html/template](/pkg/html/template/)
+#### [html/template](/pkg/html/template/)
 
-:   <!-- https://go.dev/issue/59153 -->
-    <!-- CL 481993 -->
-    Go 1.20.3 and later
-    [disallow actions in ECMAScript 6 template literals.](/pkg/html/template#hdr-Security_Model)
-    This behavior can be reverted by the `GODEBUG=jstmpllitinterp=1` setting.
+<!-- https://go.dev/issue/59153 -->
+<!-- CL 481993 -->
+Go 1.20.3 and later
+[disallow actions in ECMAScript 6 template literals.](/pkg/html/template#hdr-Security_Model)
+This behavior can be reverted by the `GODEBUG=jstmpllitinterp=1` setting.
 
 <!-- html/template -->
 
-[io](/pkg/io/)
+#### [io](/pkg/io/)
 
-:   <!-- https://go.dev/issue/45899, CL 406776 -->
-    The new [`OffsetWriter`](/pkg/io/#OffsetWriter) wraps an underlying
-    [`WriterAt`](/pkg/io/#WriterAt)
-    and provides `Seek`, `Write`, and `WriteAt` methods
-    that adjust their effective file offset position by a fixed amount.
+<!-- https://go.dev/issue/45899, CL 406776 -->
+The new [`OffsetWriter`](/pkg/io/#OffsetWriter) wraps an underlying
+[`WriterAt`](/pkg/io/#WriterAt)
+and provides `Seek`, `Write`, and `WriteAt` methods
+that adjust their effective file offset position by a fixed amount.
 
 <!-- io -->
 
-[io/fs](/pkg/io/fs/)
+#### [io/fs](/pkg/io/fs/)
 
-:   <!-- CL 363814, https://go.dev/issue/47209 -->
-    The new error [`SkipAll`](/pkg/io/fs/#SkipAll)
-    terminates a [`WalkDir`](/pkg/io/fs/#WalkDir)
-    immediately but successfully.
+<!-- CL 363814, https://go.dev/issue/47209 -->
+The new error [`SkipAll`](/pkg/io/fs/#SkipAll)
+terminates a [`WalkDir`](/pkg/io/fs/#WalkDir)
+immediately but successfully.
 
 <!-- io -->
 
-[math/big](/pkg/math/big/)
+#### [math/big](/pkg/math/big/)
 
-:   <!-- https://go.dev/issue/52182 -->
-    The [math/big](/pkg/math/big/) package's wide scope and
-    input-dependent timing make it ill-suited for implementing cryptography.
-    The cryptography packages in the standard library no longer call non-trivial
-    [Int](/pkg/math/big#Int) methods on attacker-controlled inputs.
-    In the future, the determination of whether a bug in math/big is
-    considered a security vulnerability will depend on its wider impact on the
-    standard library.
+<!-- https://go.dev/issue/52182 -->
+The [math/big](/pkg/math/big/) package's wide scope and
+input-dependent timing make it ill-suited for implementing cryptography.
+The cryptography packages in the standard library no longer call non-trivial
+[Int](/pkg/math/big#Int) methods on attacker-controlled inputs.
+In the future, the determination of whether a bug in math/big is
+considered a security vulnerability will depend on its wider impact on the
+standard library.
 
 <!-- math/big -->
 
-[math/rand](/pkg/math/rand/)
+#### [math/rand](/pkg/math/rand/)
 
-:   <!-- https://go.dev/issue/54880, CL 436955, https://go.dev/issue/56319 -->
-    The [math/rand](/pkg/math/rand/) package now automatically seeds
-    the global random number generator
-    (used by top-level functions like `Float64` and `Int`) with a random value,
-    and the top-level [`Seed`](/pkg/math/rand/#Seed) function has been deprecated.
-    Programs that need a reproducible sequence of random numbers
-    should prefer to allocate their own random source, using `rand.New(rand.NewSource(seed))`.
+<!-- https://go.dev/issue/54880, CL 436955, https://go.dev/issue/56319 -->
+The [math/rand](/pkg/math/rand/) package now automatically seeds
+the global random number generator
+(used by top-level functions like `Float64` and `Int`) with a random value,
+and the top-level [`Seed`](/pkg/math/rand/#Seed) function has been deprecated.
+Programs that need a reproducible sequence of random numbers
+should prefer to allocate their own random source, using `rand.New(rand.NewSource(seed))`.
 
-    Programs that need the earlier consistent global seeding behavior can set
-    `GODEBUG=randautoseed=0` in their environment.
+Programs that need the earlier consistent global seeding behavior can set
+`GODEBUG=randautoseed=0` in their environment.
 
-    <!-- https://go.dev/issue/20661 -->
-    The top-level [`Read`](/pkg/math/rand/#Read) function has been deprecated.
-    In almost all cases, [`crypto/rand.Read`](/pkg/crypto/rand/#Read) is more appropriate.
+<!-- https://go.dev/issue/20661 -->
+The top-level [`Read`](/pkg/math/rand/#Read) function has been deprecated.
+In almost all cases, [`crypto/rand.Read`](/pkg/crypto/rand/#Read) is more appropriate.
 
 <!-- math/rand -->
 
-[mime](/pkg/mime/)
+#### [mime](/pkg/mime/)
 
-:   <!-- https://go.dev/issue/48866 -->
-    The [`ParseMediaType`](/pkg/mime/#ParseMediaType) function now allows duplicate parameter names,
-    so long as the values of the names are the same.
+<!-- https://go.dev/issue/48866 -->
+The [`ParseMediaType`](/pkg/mime/#ParseMediaType) function now allows duplicate parameter names,
+so long as the values of the names are the same.
 
 <!-- mime -->
 
-[mime/multipart](/pkg/mime/multipart/)
+#### [mime/multipart](/pkg/mime/multipart/)
 
-:   <!-- CL 431675 -->
-    Methods of the [`Reader`](/pkg/mime/multipart/#Reader) type now wrap errors
-    returned by the underlying `io.Reader`.
+<!-- CL 431675 -->
+Methods of the [`Reader`](/pkg/mime/multipart/#Reader) type now wrap errors
+returned by the underlying `io.Reader`.
 
-    <!-- https://go.dev/issue/59153 -->
-    <!-- CL 481985 -->
-    In Go 1.19.8 and later, this package sets limits the size
-    of the MIME data it processes to protect against malicious inputs.
-    `Reader.NextPart` and `Reader.NextRawPart` limit the
-    number of headers in a part to 10000 and `Reader.ReadForm` limits
-    the total number of headers in all `FileHeaders` to 10000.
-    These limits may be adjusted with the `GODEBUG=multipartmaxheaders`
-    setting.
-    `Reader.ReadForm` further limits the number of parts in a form to 1000.
-    This limit may be adjusted with the `GODEBUG=multipartmaxparts`
-    setting.
+<!-- https://go.dev/issue/59153 -->
+<!-- CL 481985 -->
+In Go 1.19.8 and later, this package sets limits the size
+of the MIME data it processes to protect against malicious inputs.
+`Reader.NextPart` and `Reader.NextRawPart` limit the
+number of headers in a part to 10000 and `Reader.ReadForm` limits
+the total number of headers in all `FileHeaders` to 10000.
+These limits may be adjusted with the `GODEBUG=multipartmaxheaders`
+setting.
+`Reader.ReadForm` further limits the number of parts in a form to 1000.
+This limit may be adjusted with the `GODEBUG=multipartmaxparts`
+setting.
 
 <!-- mime/multipart -->
 
-[net](/pkg/net/)
+#### [net](/pkg/net/)
 
-:   <!-- https://go.dev/issue/50101, CL 446179 -->
-    The [`LookupCNAME`](/pkg/net/#LookupCNAME)
-    function now consistently returns the contents
-    of a `CNAME` record when one exists. Previously on Unix systems and
-    when using the pure Go resolver, `LookupCNAME` would return an error
-    if a `CNAME` record referred to a name that with no `A`,
-    `AAAA`, or `CNAME` record. This change modifies
-    `LookupCNAME` to match the previous behavior on Windows,
-    allowing `LookupCNAME` to succeed whenever a
-    `CNAME` exists.
+<!-- https://go.dev/issue/50101, CL 446179 -->
+The [`LookupCNAME`](/pkg/net/#LookupCNAME)
+function now consistently returns the contents
+of a `CNAME` record when one exists. Previously on Unix systems and
+when using the pure Go resolver, `LookupCNAME` would return an error
+if a `CNAME` record referred to a name that with no `A`,
+`AAAA`, or `CNAME` record. This change modifies
+`LookupCNAME` to match the previous behavior on Windows,
+allowing `LookupCNAME` to succeed whenever a
+`CNAME` exists.
 
-    <!-- https://go.dev/issue/53482, CL 413454 -->
-    [`Interface.Flags`](/pkg/net/#Interface.Flags) now includes the new flag `FlagRunning`,
-    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 `FlagUp` set but not `FlagRunning`.
+<!-- https://go.dev/issue/53482, CL 413454 -->
+[`Interface.Flags`](/pkg/net/#Interface.Flags) now includes the new flag `FlagRunning`,
+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 `FlagUp` set but not `FlagRunning`.
 
-    <!-- https://go.dev/issue/55301, CL 444955 -->
-    The new [`Dialer.ControlContext`](/pkg/net/#Dialer.ControlContext) field contains a callback function
-    similar to the existing [`Dialer.Control`](/pkg/net/#Dialer.Control) hook, that additionally
-    accepts the dial context as a parameter.
-    `Control` is ignored when `ControlContext` is not nil.
+<!-- https://go.dev/issue/55301, CL 444955 -->
+The new [`Dialer.ControlContext`](/pkg/net/#Dialer.ControlContext) field contains a callback function
+similar to the existing [`Dialer.Control`](/pkg/net/#Dialer.Control) hook, that additionally
+accepts the dial context as a parameter.
+`Control` is ignored when `ControlContext` is not nil.
 
-    <!-- CL 428955 -->
-    The Go DNS resolver recognizes the `trust-ad` resolver option.
-    When `options trust-ad` is set in `resolv.conf`,
-    the Go resolver will set the AD bit in DNS queries. The resolver does not
-    make use of the AD bit in responses.
+<!-- CL 428955 -->
+The Go DNS resolver recognizes the `trust-ad` resolver option.
+When `options trust-ad` is set in `resolv.conf`,
+the Go resolver will set the AD bit in DNS queries. The resolver does not
+make use of the AD bit in responses.
 
-    <!-- CL 448075 -->
-    DNS resolution will detect changes to `/etc/nsswitch.conf`
-    and reload the file when it changes. Checks are made at most once every
-    five seconds, matching the previous handling of `/etc/hosts`
-    and `/etc/resolv.conf`.
+<!-- CL 448075 -->
+DNS resolution will detect changes to `/etc/nsswitch.conf`
+and reload the file when it changes. Checks are made at most once every
+five seconds, matching the previous handling of `/etc/hosts`
+and `/etc/resolv.conf`.
 
 <!-- net -->
 
-[net/http](/pkg/net/http/)
+#### [net/http](/pkg/net/http/)
 
-:   <!-- https://go.dev/issue/51914 -->
-    The [`ResponseWriter.WriteHeader`](/pkg/net/http/#ResponseWriter.WriteHeader) function now supports sending
-    `1xx` status codes.
+<!-- https://go.dev/issue/51914 -->
+The [`ResponseWriter.WriteHeader`](/pkg/net/http/#ResponseWriter.WriteHeader) function now supports sending
+`1xx` status codes.
 
-    <!-- https://go.dev/issue/41773, CL 356410 -->
-    The new [`Server.DisableGeneralOptionsHandler`](/pkg/net/http/#Server.DisableGeneralOptionsHandler) configuration setting
-    allows disabling the default `OPTIONS *` handler.
+<!-- https://go.dev/issue/41773, CL 356410 -->
+The new [`Server.DisableGeneralOptionsHandler`](/pkg/net/http/#Server.DisableGeneralOptionsHandler) configuration setting
+allows disabling the default `OPTIONS *` handler.
 
-    <!-- https://go.dev/issue/54299, CL 447216 -->
-    The new [`Transport.OnProxyConnectResponse`](/pkg/net/http/#Transport.OnProxyConnectResponse) hook is called
-    when a `Transport` receives an HTTP response from a proxy
-    for a `CONNECT` request.
+<!-- https://go.dev/issue/54299, CL 447216 -->
+The new [`Transport.OnProxyConnectResponse`](/pkg/net/http/#Transport.OnProxyConnectResponse) hook is called
+when a `Transport` receives an HTTP response from a proxy
+for a `CONNECT` request.
 
-    <!-- https://go.dev/issue/53960, CL 418614  -->
-    The HTTP server now accepts HEAD requests containing a body,
-    rather than rejecting them as invalid.
+<!-- https://go.dev/issue/53960, CL 418614  -->
+The HTTP server now accepts HEAD requests containing a body,
+rather than rejecting them as invalid.
 
-    <!-- https://go.dev/issue/53896 -->
-    HTTP/2 stream errors returned by `net/http` functions may be converted
-    to a [`golang.org/x/net/http2.StreamError`](/pkg/golang.org/x/net/http2/#StreamError) using
-    [`errors.As`](/pkg/errors/#As).
+<!-- https://go.dev/issue/53896 -->
+HTTP/2 stream errors returned by `net/http` functions may be converted
+to a [`golang.org/x/net/http2.StreamError`](/pkg/golang.org/x/net/http2/#StreamError) using
+[`errors.As`](/pkg/errors/#As).
 
-    <!-- https://go.dev/cl/397734 -->
-    Leading and trailing spaces are trimmed from cookie names,
-    rather than being rejected as invalid.
-    For example, a cookie setting of "name =value"
-    is now accepted as setting the cookie "name".
+<!-- https://go.dev/cl/397734 -->
+Leading and trailing spaces are trimmed from cookie names,
+rather than being rejected as invalid.
+For example, a cookie setting of "name =value"
+is now accepted as setting the cookie "name".
 
-    <!-- https://go.dev/issue/52989 -->
-    A [`Cookie`](/pkg/net/http#Cookie) with an empty Expires field is now considered valid.
-    [`Cookie.Valid`](/pkg/net/http#Cookie.Valid) only checks Expires when it is set.
+<!-- https://go.dev/issue/52989 -->
+A [`Cookie`](/pkg/net/http#Cookie) with an empty Expires field is now considered valid.
+[`Cookie.Valid`](/pkg/net/http#Cookie.Valid) only checks Expires when it is set.
 
 <!-- net/http -->
 
-[net/netip](/pkg/net/netip/)
+#### [net/netip](/pkg/net/netip/)
 
-:   <!-- https://go.dev/issue/51766, https://go.dev/issue/51777, CL 412475 -->
-    The new [`IPv6LinkLocalAllRouters`](/pkg/net/netip/#IPv6LinkLocalAllRouters)
-    and [`IPv6Loopback`](/pkg/net/netip/#IPv6Loopback) functions
-    are the `net/netip` equivalents of
-    [`net.IPv6loopback`](/pkg/net/#IPv6loopback) and
-    [`net.IPv6linklocalallrouters`](/pkg/net/#IPv6linklocalallrouters).
+<!-- https://go.dev/issue/51766, https://go.dev/issue/51777, CL 412475 -->
+The new [`IPv6LinkLocalAllRouters`](/pkg/net/netip/#IPv6LinkLocalAllRouters)
+and [`IPv6Loopback`](/pkg/net/netip/#IPv6Loopback) functions
+are the `net/netip` equivalents of
+[`net.IPv6loopback`](/pkg/net/#IPv6loopback) and
+[`net.IPv6linklocalallrouters`](/pkg/net/#IPv6linklocalallrouters).
 
 <!-- net/netip -->
 
-[os](/pkg/os/)
+#### [os](/pkg/os/)
 
-:   <!-- CL 448897 -->
-    On Windows, the name `NUL` is no longer treated as a special case in
-    [`Mkdir`](/pkg/os/#Mkdir) and
-    [`Stat`](/pkg/os/#Stat).
+<!-- CL 448897 -->
+On Windows, the name `NUL` is no longer treated as a special case in
+[`Mkdir`](/pkg/os/#Mkdir) and
+[`Stat`](/pkg/os/#Stat).
 
-    <!-- https://go.dev/issue/52747, CL 405275 -->
-    On Windows, [`File.Stat`](/pkg/os/#File.Stat)
-    now uses the file handle to retrieve attributes when the file is a directory.
-    Previously it would use the path passed to
-    [`Open`](/pkg/os/#Open), which may no longer be the file
-    represented by the file handle if the file has been moved or replaced.
-    This change modifies `Open` to open directories without the
-    `FILE_SHARE_DELETE` access, which match the behavior of regular files.
+<!-- https://go.dev/issue/52747, CL 405275 -->
+On Windows, [`File.Stat`](/pkg/os/#File.Stat)
+now uses the file handle to retrieve attributes when the file is a directory.
+Previously it would use the path passed to
+[`Open`](/pkg/os/#Open), which may no longer be the file
+represented by the file handle if the file has been moved or replaced.
+This change modifies `Open` to open directories without the
+`FILE_SHARE_DELETE` access, which match the behavior of regular files.
 
-    <!-- https://go.dev/issue/36019, CL 405275 -->
-    On Windows, [`File.Seek`](/pkg/os/#File.Seek) now supports
-    seeking to the beginning of a directory.
+<!-- https://go.dev/issue/36019, CL 405275 -->
+On Windows, [`File.Seek`](/pkg/os/#File.Seek) now supports
+seeking to the beginning of a directory.
 
 <!-- os -->
 
-[os/exec](/pkg/os/exec/)
+#### [os/exec](/pkg/os/exec/)
 
-:   <!-- https://go.dev/issue/50436, CL 401835 -->
-    The new [`Cmd`](/pkg/os/exec/#Cmd) fields
-    [`Cancel`](/pkg/os/exec/#Cmd.Cancel) and
-    [`WaitDelay`](/pkg/os/exec/#Cmd.WaitDelay)
-    specify the behavior of the `Cmd` when its associated
-    `Context` is canceled or its process exits with I/O pipes still
-    held open by a child process.
+<!-- https://go.dev/issue/50436, CL 401835 -->
+The new [`Cmd`](/pkg/os/exec/#Cmd) fields
+[`Cancel`](/pkg/os/exec/#Cmd.Cancel) and
+[`WaitDelay`](/pkg/os/exec/#Cmd.WaitDelay)
+specify the behavior of the `Cmd` when its associated
+`Context` is canceled or its process exits with I/O pipes still
+held open by a child process.
 
 <!-- os/exec -->
 
-[path/filepath](/pkg/path/filepath/)
+#### [path/filepath](/pkg/path/filepath/)
 
-:   <!-- CL 363814, https://go.dev/issue/47209 -->
-    The new error [`SkipAll`](/pkg/path/filepath/#SkipAll)
-    terminates a [`Walk`](/pkg/path/filepath/#Walk)
-    immediately but successfully.
+<!-- CL 363814, https://go.dev/issue/47209 -->
+The new error [`SkipAll`](/pkg/path/filepath/#SkipAll)
+terminates a [`Walk`](/pkg/path/filepath/#Walk)
+immediately but successfully.
 
-    <!-- https://go.dev/issue/56219, CL 449239 -->
-    The new [`IsLocal`](/pkg/path/filepath/#IsLocal) function reports whether a path is
-    lexically local to a directory.
-    For example, if `IsLocal(p)` is `true`,
-    then `Open(p)` will refer to a file that is lexically
-    within the subtree rooted at the current directory.
+<!-- https://go.dev/issue/56219, CL 449239 -->
+The new [`IsLocal`](/pkg/path/filepath/#IsLocal) function reports whether a path is
+lexically local to a directory.
+For example, if `IsLocal(p)` is `true`,
+then `Open(p)` will refer to a file that is lexically
+within the subtree rooted at the current directory.
 
 <!-- io -->
 
-[reflect](/pkg/reflect/)
+#### [reflect](/pkg/reflect/)
 
-:   <!-- https://go.dev/issue/46746, CL 423794 -->
-    The new [`Value.Comparable`](/pkg/reflect/#Value.Comparable) and
-    [`Value.Equal`](/pkg/reflect/#Value.Equal) methods
-    can be used to compare two `Value`s for equality.
-    `Comparable` reports whether `Equal` is a valid operation for a given `Value` receiver.
+<!-- https://go.dev/issue/46746, CL 423794 -->
+The new [`Value.Comparable`](/pkg/reflect/#Value.Comparable) and
+[`Value.Equal`](/pkg/reflect/#Value.Equal) methods
+can be used to compare two `Value`s for equality.
+`Comparable` reports whether `Equal` is a valid operation for a given `Value` receiver.
 
-    <!-- https://go.dev/issue/48000, CL 389635 -->
-    The new [`Value.Grow`](/pkg/reflect/#Value.Grow) method
-    extends a slice to guarantee space for another `n` elements.
+<!-- https://go.dev/issue/48000, CL 389635 -->
+The new [`Value.Grow`](/pkg/reflect/#Value.Grow) method
+extends a slice to guarantee space for another `n` elements.
 
-    <!-- https://go.dev/issue/52376, CL 411476 -->
-    The new [`Value.SetZero`](/pkg/reflect/#Value.SetZero) method
-    sets a value to be the zero value for its type.
+<!-- https://go.dev/issue/52376, CL 411476 -->
+The new [`Value.SetZero`](/pkg/reflect/#Value.SetZero) method
+sets a value to be the zero value for its type.
 
-    <!-- CL 425184 -->
-    Go 1.18 introduced [`Value.SetIterKey`](/pkg/reflect/#Value.SetIterKey)
-    and [`Value.SetIterValue`](/pkg/reflect/#Value.SetIterValue) methods.
-    These are optimizations: `v.SetIterKey(it)` is meant to be equivalent to `v.Set(it.Key())`.
-    The implementations incorrectly omitted a check for use of unexported fields that was present in the unoptimized forms.
-    Go 1.20 corrects these methods to include the unexported field check.
+<!-- CL 425184 -->
+Go 1.18 introduced [`Value.SetIterKey`](/pkg/reflect/#Value.SetIterKey)
+and [`Value.SetIterValue`](/pkg/reflect/#Value.SetIterValue) methods.
+These are optimizations: `v.SetIterKey(it)` is meant to be equivalent to `v.Set(it.Key())`.
+The implementations incorrectly omitted a check for use of unexported fields that was present in the unoptimized forms.
+Go 1.20 corrects these methods to include the unexported field check.
 
 <!-- reflect -->
 
-[regexp](/pkg/regexp/)
+#### [regexp](/pkg/regexp/)
 
-:   <!-- CL 444817 -->
-    Go 1.19.2 and Go 1.18.7 included a security fix to the regular expression parser,
-    making it reject very large expressions that would consume too much memory.
-    Because Go patch releases do not introduce new API,
-    the parser returned [`syntax.ErrInternalError`](/pkg/regexp/syntax/#ErrInternalError) in this case.
-    Go 1.20 adds a more specific error, [`syntax.ErrLarge`](/pkg/regexp/syntax/#ErrLarge),
-    which the parser now returns instead.
+<!-- CL 444817 -->
+Go 1.19.2 and Go 1.18.7 included a security fix to the regular expression parser,
+making it reject very large expressions that would consume too much memory.
+Because Go patch releases do not introduce new API,
+the parser returned [`syntax.ErrInternalError`](/pkg/regexp/syntax/#ErrInternalError) in this case.
+Go 1.20 adds a more specific error, [`syntax.ErrLarge`](/pkg/regexp/syntax/#ErrLarge),
+which the parser now returns instead.
 
 <!-- regexp -->
 
-[runtime/cgo](/pkg/runtime/cgo/)
+#### [runtime/cgo](/pkg/runtime/cgo/)
 
-:   <!-- https://go.dev/issue/46731, CL 421879 -->
-    Go 1.20 adds new [`Incomplete`](/pkg/runtime/cgo/#Incomplete) marker type.
-    Code generated by cgo will use `cgo.Incomplete` to mark an incomplete C type.
+<!-- https://go.dev/issue/46731, CL 421879 -->
+Go 1.20 adds new [`Incomplete`](/pkg/runtime/cgo/#Incomplete) marker type.
+Code generated by cgo will use `cgo.Incomplete` to mark an incomplete C type.
 
 <!-- runtime/cgo -->
 
-[runtime/metrics](/pkg/runtime/metrics/)
+#### [runtime/metrics](/pkg/runtime/metrics/)
 
-:   <!-- https://go.dev/issue/47216, https://go.dev/issue/49881 -->
-    Go 1.20 adds new [supported metrics](/pkg/runtime/metrics/#hdr-Supported_metrics),
-    including the current `GOMAXPROCS` setting (`/sched/gomaxprocs:threads`),
-    the number of cgo calls executed (`/cgo/go-to-c-calls:calls`),
-    total mutex block time (`/sync/mutex/wait/total:seconds`), and various measures of time
-    spent in garbage collection.
+<!-- https://go.dev/issue/47216, https://go.dev/issue/49881 -->
+Go 1.20 adds new [supported metrics](/pkg/runtime/metrics/#hdr-Supported_metrics),
+including the current `GOMAXPROCS` setting (`/sched/gomaxprocs:threads`),
+the number of cgo calls executed (`/cgo/go-to-c-calls:calls`),
+total mutex block time (`/sync/mutex/wait/total:seconds`), and various measures of time
+spent in garbage collection.
 
-    <!-- CL 427615 -->
-    Time-based histogram metrics are now less precise, but take up much less memory.
+<!-- CL 427615 -->
+Time-based histogram metrics are now less precise, but take up much less memory.
 
 <!-- runtime/metrics -->
 
-[runtime/pprof](/pkg/runtime/pprof/)
+#### [runtime/pprof](/pkg/runtime/pprof/)
 
-:   <!-- CL 443056 -->
-    Mutex profile samples are now pre-scaled, fixing an issue where old mutex profile
-    samples would be scaled incorrectly if the sampling rate changed during execution.
+<!-- CL 443056 -->
+Mutex profile samples are now pre-scaled, fixing an issue where old mutex profile
+samples would be scaled incorrectly if the sampling rate changed during execution.
 
-    <!-- CL 416975 -->
-    Profiles collected on Windows now include memory mapping information that fixes
-    symbolization issues for position-independent binaries.
+<!-- CL 416975 -->
+Profiles collected on Windows now include memory mapping information that fixes
+symbolization issues for position-independent binaries.
 
 <!-- runtime/pprof -->
 
-[runtime/trace](/pkg/runtime/trace/)
+#### [runtime/trace](/pkg/runtime/trace/)
 
-:   <!-- CL 447135, https://go.dev/issue/55022 -->
-    The garbage collector's background sweeper now yields less frequently,
-    resulting in many fewer extraneous events in execution traces.
+<!-- CL 447135, https://go.dev/issue/55022 -->
+The garbage collector's background sweeper now yields less frequently,
+resulting in many fewer extraneous events in execution traces.
 
 <!-- runtime/trace -->
 
-[strings](/pkg/strings/)
+#### [strings](/pkg/strings/)
 
-:   <!-- CL 407176, https://go.dev/issue/42537 -->
-    The new
-    [`CutPrefix`](/pkg/strings/#CutPrefix) and
-    [`CutSuffix`](/pkg/strings/#CutSuffix) functions
-    are like [`TrimPrefix`](/pkg/strings/#TrimPrefix)
-    and [`TrimSuffix`](/pkg/strings/#TrimSuffix)
-    but also report whether the string was trimmed.
+<!-- CL 407176, https://go.dev/issue/42537 -->
+The new
+[`CutPrefix`](/pkg/strings/#CutPrefix) and
+[`CutSuffix`](/pkg/strings/#CutSuffix) functions
+are like [`TrimPrefix`](/pkg/strings/#TrimPrefix)
+and [`TrimSuffix`](/pkg/strings/#TrimSuffix)
+but also report whether the string was trimmed.
 
 <!-- strings -->
 
-[sync](/pkg/sync/)
+#### [sync](/pkg/sync/)
 
-:   <!-- CL 399094, https://go.dev/issue/51972 -->
-    The new [`Map`](/pkg/sync/#Map) methods [`Swap`](/pkg/sync/#Map.Swap),
-    [`CompareAndSwap`](/pkg/sync/#Map.CompareAndSwap), and
-    [`CompareAndDelete`](/pkg/sync/#Map.CompareAndDelete)
-    allow existing map entries to be updated atomically.
+<!-- CL 399094, https://go.dev/issue/51972 -->
+The new [`Map`](/pkg/sync/#Map) methods [`Swap`](/pkg/sync/#Map.Swap),
+[`CompareAndSwap`](/pkg/sync/#Map.CompareAndSwap), and
+[`CompareAndDelete`](/pkg/sync/#Map.CompareAndDelete)
+allow existing map entries to be updated atomically.
 
 <!-- sync -->
 
-[syscall](/pkg/syscall/)
+#### [syscall](/pkg/syscall/)
 
-:   <!-- CL 411596 -->
-    On FreeBSD, compatibility shims needed for FreeBSD 11 and earlier have been removed.
+<!-- CL 411596 -->
+On FreeBSD, compatibility shims needed for FreeBSD 11 and earlier have been removed.
 
-    <!-- CL 407574 -->
-    On Linux, additional [`CLONE_*`](/pkg/syscall/#CLONE_CLEAR_SIGHAND) constants
-    are defined for use with the [`SysProcAttr.Cloneflags`](/pkg/syscall/#SysProcAttr.Cloneflags) field.
+<!-- CL 407574 -->
+On Linux, additional [`CLONE_*`](/pkg/syscall/#CLONE_CLEAR_SIGHAND) constants
+are defined for use with the [`SysProcAttr.Cloneflags`](/pkg/syscall/#SysProcAttr.Cloneflags) field.
 
-    <!-- CL 417695 -->
-    On Linux, the new [`SysProcAttr.CgroupFD`](/pkg/syscall/#SysProcAttr.CgroupFD)
-    and [`SysProcAttr.UseCgroupFD`](/pkg/syscall/#SysProcAttr.UseCgroupFD) fields
-    provide a way to place a child process into a specific cgroup.
+<!-- CL 417695 -->
+On Linux, the new [`SysProcAttr.CgroupFD`](/pkg/syscall/#SysProcAttr.CgroupFD)
+and [`SysProcAttr.UseCgroupFD`](/pkg/syscall/#SysProcAttr.UseCgroupFD) fields
+provide a way to place a child process into a specific cgroup.
 
 <!-- syscall -->
 
-[testing](/pkg/testing/)
+#### [testing](/pkg/testing/)
 
-:   <!-- https://go.dev/issue/43620, CL 420254 -->
-    The new method [`B.Elapsed`](/pkg/testing/#B.Elapsed)
-    reports the current elapsed time of the benchmark, which may be useful for
-    calculating rates to report with `ReportMetric`.
+<!-- https://go.dev/issue/43620, CL 420254 -->
+The new method [`B.Elapsed`](/pkg/testing/#B.Elapsed)
+reports the current elapsed time of the benchmark, which may be useful for
+calculating rates to report with `ReportMetric`.
 
-    <!-- https://go.dev/issue/48515, CL 352349 -->
-    Calling [`T.Run`](/pkg/testing/#T.Run)
-    from a function passed
-    to [`T.Cleanup`](/pkg/testing/#T.Cleanup)
-    was never well-defined, and will now panic.
+<!-- https://go.dev/issue/48515, CL 352349 -->
+Calling [`T.Run`](/pkg/testing/#T.Run)
+from a function passed
+to [`T.Cleanup`](/pkg/testing/#T.Cleanup)
+was never well-defined, and will now panic.
 
 <!-- testing -->
 
-[time](/pkg/time/)
+#### [time](/pkg/time/)
 
-:   <!-- https://go.dev/issue/52746, CL 412495 -->
-    The new time layout constants [`DateTime`](/pkg/time/#DateTime),
-    [`DateOnly`](/pkg/time/#DateOnly), and
-    [`TimeOnly`](/pkg/time/#TimeOnly)
-    provide names for three of the most common layout strings used in a survey of public Go source code.
+<!-- https://go.dev/issue/52746, CL 412495 -->
+The new time layout constants [`DateTime`](/pkg/time/#DateTime),
+[`DateOnly`](/pkg/time/#DateOnly), and
+[`TimeOnly`](/pkg/time/#TimeOnly)
+provide names for three of the most common layout strings used in a survey of public Go source code.
 
-    <!-- CL 382734, https://go.dev/issue/50770 -->
-    The new [`Time.Compare`](/pkg/time/#Time.Compare) method
-    compares two times.
+<!-- CL 382734, https://go.dev/issue/50770 -->
+The new [`Time.Compare`](/pkg/time/#Time.Compare) method
+compares two times.
 
-    <!-- CL 425037 -->
-    [`Parse`](/pkg/time/#Parse)
-    now ignores sub-nanosecond precision in its input,
-    instead of reporting those digits as an error.
+<!-- CL 425037 -->
+[`Parse`](/pkg/time/#Parse)
+now ignores sub-nanosecond precision in its input,
+instead of reporting those digits as an error.
 
-    <!-- CL 444277 -->
-    The [`Time.MarshalJSON`](/pkg/time/#Time.MarshalJSON) method
-    is now more strict about adherence to RFC 3339.
+<!-- CL 444277 -->
+The [`Time.MarshalJSON`](/pkg/time/#Time.MarshalJSON) method
+is now more strict about adherence to RFC 3339.
 
 <!-- time -->
 
-[unicode/utf16](/pkg/unicode/utf16/)
+#### [unicode/utf16](/pkg/unicode/utf16/)
 
-:   <!-- https://go.dev/issue/51896, CL 409054 -->
-    The new [`AppendRune`](/pkg/unicode/utf16/#AppendRune)
-    function appends the UTF-16 encoding of a given rune to a uint16 slice,
-    analogous to [`utf8.AppendRune`](/pkg/unicode/utf8/#AppendRune).
+<!-- https://go.dev/issue/51896, CL 409054 -->
+The new [`AppendRune`](/pkg/unicode/utf16/#AppendRune)
+function appends the UTF-16 encoding of a given rune to a uint16 slice,
+analogous to [`utf8.AppendRune`](/pkg/unicode/utf8/#AppendRune).
 
 <!-- unicode/utf16 -->
 
diff --git a/_content/doc/go1.21.md b/_content/doc/go1.21.md
index 58d425d..b6cd3fc 100644
--- a/_content/doc/go1.21.md
+++ b/_content/doc/go1.21.md
@@ -351,420 +351,420 @@
 in mind.
 There are also various performance improvements, not enumerated here.
 
-[archive/tar](/pkg/archive/tar/)
+#### [archive/tar](/pkg/archive/tar/)
 
-:   <!-- https://go.dev/issue/54451, CL 491175 -->
-    The implementation of the
-    [`io/fs.FileInfo`](/pkg/io/fs/#FileInfo)
-    interface returned by
-    [`Header.FileInfo`](/pkg/archive/tar/#Header.FileInfo)
-    now implements a `String` method that calls
-    [`io/fs.FormatFileInfo`](/pkg/io/fs/#FormatFileInfo).
+<!-- https://go.dev/issue/54451, CL 491175 -->
+The implementation of the
+[`io/fs.FileInfo`](/pkg/io/fs/#FileInfo)
+interface returned by
+[`Header.FileInfo`](/pkg/archive/tar/#Header.FileInfo)
+now implements a `String` method that calls
+[`io/fs.FormatFileInfo`](/pkg/io/fs/#FormatFileInfo).
 
 <!-- archive/tar -->
 
-[archive/zip](/pkg/archive/zip/)
+#### [archive/zip](/pkg/archive/zip/)
 
-:   <!-- https://go.dev/issue/54451, CL 491175 -->
-    The implementation of the
-    [`io/fs.FileInfo`](/pkg/io/fs/#FileInfo)
-    interface returned by
-    [`FileHeader.FileInfo`](/pkg/archive/zip/#FileHeader.FileInfo)
-    now implements a `String` method that calls
-    [`io/fs.FormatFileInfo`](/pkg/io/fs/#FormatFileInfo).
+<!-- https://go.dev/issue/54451, CL 491175 -->
+The implementation of the
+[`io/fs.FileInfo`](/pkg/io/fs/#FileInfo)
+interface returned by
+[`FileHeader.FileInfo`](/pkg/archive/zip/#FileHeader.FileInfo)
+now implements a `String` method that calls
+[`io/fs.FormatFileInfo`](/pkg/io/fs/#FormatFileInfo).
 
-    <!-- https://go.dev/issue/54451, CL 491175 -->
-    The implementation of the
-    [`io/fs.DirEntry`](/pkg/io/fs/#DirEntry)
-    interface returned by the
-    [`io/fs.ReadDirFile.ReadDir`](/pkg/io/fs/#ReadDirFile.ReadDir)
-    method of the
-    [`io/fs.File`](/pkg/io/fs/#File)
-    returned by
-    [`Reader.Open`](/pkg/archive/zip/#Reader.Open)
-    now implements a `String` method that calls
-    [`io/fs.FormatDirEntry`](/pkg/io/fs/#FormatDirEntry).
+<!-- https://go.dev/issue/54451, CL 491175 -->
+The implementation of the
+[`io/fs.DirEntry`](/pkg/io/fs/#DirEntry)
+interface returned by the
+[`io/fs.ReadDirFile.ReadDir`](/pkg/io/fs/#ReadDirFile.ReadDir)
+method of the
+[`io/fs.File`](/pkg/io/fs/#File)
+returned by
+[`Reader.Open`](/pkg/archive/zip/#Reader.Open)
+now implements a `String` method that calls
+[`io/fs.FormatDirEntry`](/pkg/io/fs/#FormatDirEntry).
 
 <!-- archive/zip -->
 
-[bytes](/pkg/bytes/)
+#### [bytes](/pkg/bytes/)
 
-:   <!-- https://go.dev/issue/53685, CL 474635 -->
-    The [`Buffer`](/pkg/bytes/#Buffer) type
-    has two new methods:
-    [`Available`](/pkg/bytes/#Buffer.Available)
-    and [`AvailableBuffer`](/pkg/bytes/#Buffer.AvailableBuffer).
-    These may be used along with the
-    [`Write`](/pkg/bytes/#Buffer.Write)
-    method to append directly to the `Buffer`.
+<!-- https://go.dev/issue/53685, CL 474635 -->
+The [`Buffer`](/pkg/bytes/#Buffer) type
+has two new methods:
+[`Available`](/pkg/bytes/#Buffer.Available)
+and [`AvailableBuffer`](/pkg/bytes/#Buffer.AvailableBuffer).
+These may be used along with the
+[`Write`](/pkg/bytes/#Buffer.Write)
+method to append directly to the `Buffer`.
 
 <!-- bytes -->
 
-[context](/pkg/context/)
+#### [context](/pkg/context/)
 
-:   <!-- https://go.dev/issue/40221, CL 479918 -->
-    The new [`WithoutCancel`](/pkg/context/#WithoutCancel)
-    function returns a copy of a context that is not canceled when the original
-    context is canceled.
+<!-- https://go.dev/issue/40221, CL 479918 -->
+The new [`WithoutCancel`](/pkg/context/#WithoutCancel)
+function returns a copy of a context that is not canceled when the original
+context is canceled.
 
-    <!-- https://go.dev/issue/56661, CL 449318 -->
-    The new [`WithDeadlineCause`](/pkg/context/#WithDeadlineCause)
-    and [`WithTimeoutCause`](/pkg/context/#WithTimeoutCause)
-    functions provide a way to set a context cancellation cause when a deadline or
-    timer expires. The cause may be retrieved with the
-    [`Cause`](/pkg/context/#Cause) function.
+<!-- https://go.dev/issue/56661, CL 449318 -->
+The new [`WithDeadlineCause`](/pkg/context/#WithDeadlineCause)
+and [`WithTimeoutCause`](/pkg/context/#WithTimeoutCause)
+functions provide a way to set a context cancellation cause when a deadline or
+timer expires. The cause may be retrieved with the
+[`Cause`](/pkg/context/#Cause) function.
 
-    <!-- https://go.dev/issue/57928, CL 482695 -->
-    The new [`AfterFunc`](/pkg/context/#AfterFunc)
-    function registers a function to run after a context has been cancelled.
+<!-- https://go.dev/issue/57928, CL 482695 -->
+The new [`AfterFunc`](/pkg/context/#AfterFunc)
+function registers a function to run after a context has been cancelled.
 
-    <!-- CL 455455 -->
-    An optimization means that the results of calling
-    [`Background`](/pkg/context/#Background)
-    and [`TODO`](/pkg/context/#TODO) and
-    converting them to a shared type can be considered equal.
-    In previous releases they were always different. Comparing
-    [`Context`](/pkg/context/#Context) values
-    for equality has never been well-defined, so this is not
-    considered to be an incompatible change.
+<!-- CL 455455 -->
+An optimization means that the results of calling
+[`Background`](/pkg/context/#Background)
+and [`TODO`](/pkg/context/#TODO) and
+converting them to a shared type can be considered equal.
+In previous releases they were always different. Comparing
+[`Context`](/pkg/context/#Context) values
+for equality has never been well-defined, so this is not
+considered to be an incompatible change.
 
-[crypto/ecdsa](/pkg/crypto/ecdsa/)
+#### [crypto/ecdsa](/pkg/crypto/ecdsa/)
 
-:   <!-- CL 492955 -->
-    [`PublicKey.Equal`](/pkg/crypto/ecdsa/#PublicKey.Equal) and
-    [`PrivateKey.Equal`](/pkg/crypto/ecdsa/#PrivateKey.Equal)
-    now execute in constant time.
+<!-- CL 492955 -->
+[`PublicKey.Equal`](/pkg/crypto/ecdsa/#PublicKey.Equal) and
+[`PrivateKey.Equal`](/pkg/crypto/ecdsa/#PrivateKey.Equal)
+now execute in constant time.
 
 <!-- crypto/ecdsa -->
 
-[crypto/elliptic](/pkg/crypto/elliptic/)
+#### [crypto/elliptic](/pkg/crypto/elliptic/)
 
-:   <!-- CL 459977 -->
-    All of the [`Curve`](/pkg/crypto/elliptic/#Curve) methods have been deprecated, along with [`GenerateKey`](/pkg/crypto/elliptic/#GenerateKey), [`Marshal`](/pkg/crypto/elliptic/#Marshal), and [`Unmarshal`](/pkg/crypto/elliptic/#Unmarshal). For ECDH operations, the new [`crypto/ecdh`](/pkg/crypto/ecdh/) package should be used instead. For lower-level operations, use third-party modules such as [filippo.io/nistec](https://pkg.go.dev/filippo.io/nistec).
+<!-- CL 459977 -->
+All of the [`Curve`](/pkg/crypto/elliptic/#Curve) methods have been deprecated, along with [`GenerateKey`](/pkg/crypto/elliptic/#GenerateKey), [`Marshal`](/pkg/crypto/elliptic/#Marshal), and [`Unmarshal`](/pkg/crypto/elliptic/#Unmarshal). For ECDH operations, the new [`crypto/ecdh`](/pkg/crypto/ecdh/) package should be used instead. For lower-level operations, use third-party modules such as [filippo.io/nistec](https://pkg.go.dev/filippo.io/nistec).
 
 <!-- crypto/elliptic -->
 
-[crypto/rand](/pkg/crypto/rand/)
+#### [crypto/rand](/pkg/crypto/rand/)
 
-:   <!-- CL 463123 -->
-    The [`crypto/rand`](/pkg/crypto/rand/) package now uses the `getrandom` system call on NetBSD 10.0 and later.
+<!-- CL 463123 -->
+The [`crypto/rand`](/pkg/crypto/rand/) package now uses the `getrandom` system call on NetBSD 10.0 and later.
 
 <!-- crypto/rand -->
 
-[crypto/rsa](/pkg/crypto/rsa/)
+#### [crypto/rsa](/pkg/crypto/rsa/)
 
-:   <!-- CL 471259, CL 492935 -->
-    The performance of private RSA operations (decryption and signing) is now better than Go 1.19 for `GOARCH=amd64` and `GOARCH=arm64`. It had regressed in Go 1.20.
+<!-- CL 471259, CL 492935 -->
+The performance of private RSA operations (decryption and signing) is now better than Go 1.19 for `GOARCH=amd64` and `GOARCH=arm64`. It had regressed in Go 1.20.
 
-    Due to the addition of private fields to [`PrecomputedValues`](/pkg/crypto/rsa/#PrecomputedValues), [`PrivateKey.Precompute`](/pkg/crypto/rsa/#PrivateKey.Precompute) must be called for optimal performance even if deserializing (for example from JSON) a previously-precomputed private key.
+Due to the addition of private fields to [`PrecomputedValues`](/pkg/crypto/rsa/#PrecomputedValues), [`PrivateKey.Precompute`](/pkg/crypto/rsa/#PrivateKey.Precompute) must be called for optimal performance even if deserializing (for example from JSON) a previously-precomputed private key.
 
-    <!-- CL 492955 -->
-    [`PublicKey.Equal`](/pkg/crypto/rsa/#PublicKey.Equal) and
-    [`PrivateKey.Equal`](/pkg/crypto/rsa/#PrivateKey.Equal)
-    now execute in constant time.
+<!-- CL 492955 -->
+[`PublicKey.Equal`](/pkg/crypto/rsa/#PublicKey.Equal) and
+[`PrivateKey.Equal`](/pkg/crypto/rsa/#PrivateKey.Equal)
+now execute in constant time.
 
-    <!-- https://go.dev/issue/56921, CL 459976 -->
-    The [`GenerateMultiPrimeKey`](/pkg/crypto/rsa/#GenerateMultiPrimeKey) function and the [`PrecomputedValues.CRTValues`](/pkg/crypto/rsa/#PrecomputedValues.CRTValues) field have been deprecated. [`PrecomputedValues.CRTValues`](/pkg/crypto/rsa/#PrecomputedValues.CRTValues) will still be populated when [`PrivateKey.Precompute`](/pkg/crypto/rsa/#PrivateKey.Precompute) is called, but the values will not be used during decryption operations.
+<!-- https://go.dev/issue/56921, CL 459976 -->
+The [`GenerateMultiPrimeKey`](/pkg/crypto/rsa/#GenerateMultiPrimeKey) function and the [`PrecomputedValues.CRTValues`](/pkg/crypto/rsa/#PrecomputedValues.CRTValues) field have been deprecated. [`PrecomputedValues.CRTValues`](/pkg/crypto/rsa/#PrecomputedValues.CRTValues) will still be populated when [`PrivateKey.Precompute`](/pkg/crypto/rsa/#PrivateKey.Precompute) is called, but the values will not be used during decryption operations.
 
 <!-- crypto/rsa -->
 
 <!-- CL 483815 reverted -->
 
-[crypto/sha256](/pkg/crypto/sha256/)
+#### [crypto/sha256](/pkg/crypto/sha256/)
 
-:   <!-- https://go.dev/issue/50543, CL 408795 -->
-    SHA-224 and SHA-256 operations now use native instructions when available when `GOARCH=amd64`, providing a performance improvement on the order of 3-4x.
+<!-- https://go.dev/issue/50543, CL 408795 -->
+SHA-224 and SHA-256 operations now use native instructions when available when `GOARCH=amd64`, providing a performance improvement on the order of 3-4x.
 
 <!-- crypto/sha256 -->
 
 <!-- CL 481478 reverted -->
 <!-- CL 483816 reverted -->
 
-[crypto/tls](/pkg/crypto/tls/)
+#### [crypto/tls](/pkg/crypto/tls/)
 
-:   <!-- CL 497895 -->
-    Servers now skip verifying client certificates (including not running
-    [`Config.VerifyPeerCertificate`](/pkg/crypto/tls/#Config.VerifyPeerCertificate))
-    for resumed connections, besides checking the expiration time. This makes
-    session tickets larger when client certificates are in use. Clients were
-    already skipping verification on resumption, but now check the expiration
-    time even if [`Config.InsecureSkipVerify`](/pkg/crypto/tls/#Config.InsecureSkipVerify)
-    is set.
+<!-- CL 497895 -->
+Servers now skip verifying client certificates (including not running
+[`Config.VerifyPeerCertificate`](/pkg/crypto/tls/#Config.VerifyPeerCertificate))
+for resumed connections, besides checking the expiration time. This makes
+session tickets larger when client certificates are in use. Clients were
+already skipping verification on resumption, but now check the expiration
+time even if [`Config.InsecureSkipVerify`](/pkg/crypto/tls/#Config.InsecureSkipVerify)
+is set.
 
-    <!-- https://go.dev/issue/60105, CL 496818, CL 496820, CL 496822, CL 496821, CL 501675 -->
-    Applications can now control the content of session tickets.
+<!-- https://go.dev/issue/60105, CL 496818, CL 496820, CL 496822, CL 496821, CL 501675 -->
+Applications can now control the content of session tickets.
 
-      - The new [`SessionState`](/pkg/crypto/tls/#SessionState) type
-        describes a resumable session.
-      - The [`SessionState.Bytes`](/pkg/crypto/tls/#SessionState.Bytes)
-        method and [`ParseSessionState`](/pkg/crypto/tls/#ParseSessionState)
-        function serialize and deserialize a `SessionState`.
-      - The [`Config.WrapSession`](/pkg/crypto/tls/#Config.WrapSession) and
-        [`Config.UnwrapSession`](/pkg/crypto/tls/#Config.UnwrapSession)
-        hooks convert a `SessionState` to and from a ticket on the server side.
-      - The [`Config.EncryptTicket`](/pkg/crypto/tls/#Config.EncryptTicket)
-        and [`Config.DecryptTicket`](/pkg/crypto/tls/#Config.DecryptTicket)
-        methods provide a default implementation of `WrapSession` and
-        `UnwrapSession`.
-      - The [`ClientSessionState.ResumptionState`](/pkg/crypto/tls/#ClientSessionState.ResumptionState) method and
-        [`NewResumptionState`](/pkg/crypto/tls/#NewResumptionState) function
-        may be used by a `ClientSessionCache` implementation to store and
-        resume sessions on the client side.
+  - The new [`SessionState`](/pkg/crypto/tls/#SessionState) type
+    describes a resumable session.
+  - The [`SessionState.Bytes`](/pkg/crypto/tls/#SessionState.Bytes)
+    method and [`ParseSessionState`](/pkg/crypto/tls/#ParseSessionState)
+    function serialize and deserialize a `SessionState`.
+  - The [`Config.WrapSession`](/pkg/crypto/tls/#Config.WrapSession) and
+    [`Config.UnwrapSession`](/pkg/crypto/tls/#Config.UnwrapSession)
+    hooks convert a `SessionState` to and from a ticket on the server side.
+  - The [`Config.EncryptTicket`](/pkg/crypto/tls/#Config.EncryptTicket)
+    and [`Config.DecryptTicket`](/pkg/crypto/tls/#Config.DecryptTicket)
+    methods provide a default implementation of `WrapSession` and
+    `UnwrapSession`.
+  - The [`ClientSessionState.ResumptionState`](/pkg/crypto/tls/#ClientSessionState.ResumptionState) method and
+    [`NewResumptionState`](/pkg/crypto/tls/#NewResumptionState) function
+    may be used by a `ClientSessionCache` implementation to store and
+    resume sessions on the client side.
 
 
-    <!-- CL 496817 -->
-    To reduce the potential for session tickets to be used as a tracking
-    mechanism across connections, the server now issues new tickets on every
-    resumption (if they are supported and not disabled) and tickets don't bear
-    an identifier for the key that encrypted them anymore. If passing a large
-    number of keys to [`Conn.SetSessionTicketKeys`](/pkg/crypto/tls/#Conn.SetSessionTicketKeys),
-    this might lead to a noticeable performance cost.
+<!-- CL 496817 -->
+To reduce the potential for session tickets to be used as a tracking
+mechanism across connections, the server now issues new tickets on every
+resumption (if they are supported and not disabled) and tickets don't bear
+an identifier for the key that encrypted them anymore. If passing a large
+number of keys to [`Conn.SetSessionTicketKeys`](/pkg/crypto/tls/#Conn.SetSessionTicketKeys),
+this might lead to a noticeable performance cost.
 
-    <!-- CL 497376 -->
-    Both clients and servers now implement the Extended Master Secret extension (RFC 7627).
-    The deprecation of [`ConnectionState.TLSUnique`](/pkg/crypto/tls/#ConnectionState.TLSUnique)
-    has been reverted, and is now set for resumed connections that support Extended Master Secret.
+<!-- CL 497376 -->
+Both clients and servers now implement the Extended Master Secret extension (RFC 7627).
+The deprecation of [`ConnectionState.TLSUnique`](/pkg/crypto/tls/#ConnectionState.TLSUnique)
+has been reverted, and is now set for resumed connections that support Extended Master Secret.
 
-    <!-- https://go.dev/issue/44886, https://go.dev/issue/60107, CL 493655, CL 496995, CL 514997 -->
-    The new [`QUICConn`](/pkg/crypto/tls/#QUICConn) type
-    provides support for QUIC implementations, including 0-RTT support. Note
-    that this is not itself a QUIC implementation, and 0-RTT is still not
-    supported in TLS.
+<!-- https://go.dev/issue/44886, https://go.dev/issue/60107, CL 493655, CL 496995, CL 514997 -->
+The new [`QUICConn`](/pkg/crypto/tls/#QUICConn) type
+provides support for QUIC implementations, including 0-RTT support. Note
+that this is not itself a QUIC implementation, and 0-RTT is still not
+supported in TLS.
 
-    <!-- https://go.dev/issue/46308, CL 497377 -->
-    The new [`VersionName`](/pkg/crypto/tls/#VersionName) function
-    returns the name for a TLS version number.
+<!-- https://go.dev/issue/46308, CL 497377 -->
+The new [`VersionName`](/pkg/crypto/tls/#VersionName) function
+returns the name for a TLS version number.
 
-    <!-- https://go.dev/issue/52113, CL 410496 -->
-    The TLS alert codes sent from the server for client authentication failures have
-    been improved. Previously, these failures always resulted in a "bad certificate" alert.
-    Now, certain failures will result in more appropriate alert codes,
-    as defined by RFC 5246 and RFC 8446:
+<!-- https://go.dev/issue/52113, CL 410496 -->
+The TLS alert codes sent from the server for client authentication failures have
+been improved. Previously, these failures always resulted in a "bad certificate" alert.
+Now, certain failures will result in more appropriate alert codes,
+as defined by RFC 5246 and RFC 8446:
 
-      - For TLS 1.3 connections, if the server is configured to require client authentication using
-        [RequireAnyClientCert](/pkg/crypto/tls/#RequireAnyClientCert) or
-        [RequireAndVerifyClientCert](/pkg/crypto/tls/#RequireAndVerifyClientCert),
-        and the client does not provide any certificate, the server will now return the "certificate required" alert.
-      - If the client provides a certificate that is not signed by the set of trusted certificate authorities
-        configured on the server, the server will return the "unknown certificate authority" alert.
-      - If the client provides a certificate that is either expired or not yet valid,
-        the server will return the "expired certificate" alert.
-      - In all other scenarios related to client authentication failures, the server still returns "bad certificate".
+  - For TLS 1.3 connections, if the server is configured to require client authentication using
+    [RequireAnyClientCert](/pkg/crypto/tls/#RequireAnyClientCert) or
+    [RequireAndVerifyClientCert](/pkg/crypto/tls/#RequireAndVerifyClientCert),
+    and the client does not provide any certificate, the server will now return the "certificate required" alert.
+  - If the client provides a certificate that is not signed by the set of trusted certificate authorities
+    configured on the server, the server will return the "unknown certificate authority" alert.
+  - If the client provides a certificate that is either expired or not yet valid,
+    the server will return the "expired certificate" alert.
+  - In all other scenarios related to client authentication failures, the server still returns "bad certificate".
 
 
 <!-- crypto/tls -->
 
-[crypto/x509](/pkg/crypto/x509/)
+#### [crypto/x509](/pkg/crypto/x509/)
 
-:   <!-- https://go.dev/issue/53573, CL 468875 -->
-    [`RevocationList.RevokedCertificates`](/pkg/crypto/x509/#RevocationList.RevokedCertificates) has been deprecated and replaced with the new [`RevokedCertificateEntries`](/pkg/crypto/x509/#RevocationList.RevokedCertificateEntries) field, which is a slice of [`RevocationListEntry`](/pkg/crypto/x509/#RevocationListEntry). [`RevocationListEntry`](/pkg/crypto/x509/#RevocationListEntry) contains all of the fields in [`pkix.RevokedCertificate`](/pkg/crypto/x509/pkix#RevokedCertificate), as well as the revocation reason code.
+<!-- https://go.dev/issue/53573, CL 468875 -->
+[`RevocationList.RevokedCertificates`](/pkg/crypto/x509/#RevocationList.RevokedCertificates) has been deprecated and replaced with the new [`RevokedCertificateEntries`](/pkg/crypto/x509/#RevocationList.RevokedCertificateEntries) field, which is a slice of [`RevocationListEntry`](/pkg/crypto/x509/#RevocationListEntry). [`RevocationListEntry`](/pkg/crypto/x509/#RevocationListEntry) contains all of the fields in [`pkix.RevokedCertificate`](/pkg/crypto/x509/pkix#RevokedCertificate), as well as the revocation reason code.
 
-    <!-- CL 478216 -->
-    Name constraints are now correctly enforced on non-leaf certificates, and
-    not on the certificates where they are expressed.
+<!-- CL 478216 -->
+Name constraints are now correctly enforced on non-leaf certificates, and
+not on the certificates where they are expressed.
 
 <!-- crypto/x509 -->
 
-[debug/elf](/pkg/debug/elf/)
+#### [debug/elf](/pkg/debug/elf/)
 
-:   <!-- https://go.dev/issue/56892, CL 452617 -->
-    The new
-    [`File.DynValue`](/pkg/debug/elf/#File.DynValue)
-    method may be used to retrieve the numeric values listed with a
-    given dynamic tag.
+<!-- https://go.dev/issue/56892, CL 452617 -->
+The new
+[`File.DynValue`](/pkg/debug/elf/#File.DynValue)
+method may be used to retrieve the numeric values listed with a
+given dynamic tag.
 
-    <!-- https://go.dev/issue/56887, CL 452496 -->
-    The constant flags permitted in a `DT_FLAGS_1`
-    dynamic tag are now defined with type
-    [`DynFlag1`](/pkg/debug/elf/#DynFlag1). These
-    tags have names starting with `DF_1`.
+<!-- https://go.dev/issue/56887, CL 452496 -->
+The constant flags permitted in a `DT_FLAGS_1`
+dynamic tag are now defined with type
+[`DynFlag1`](/pkg/debug/elf/#DynFlag1). These
+tags have names starting with `DF_1`.
 
-    <!-- CL 473256 -->
-    The package now defines the constant
-    [`COMPRESS_ZSTD`](/pkg/debug/elf/#COMPRESS_ZSTD).
+<!-- CL 473256 -->
+The package now defines the constant
+[`COMPRESS_ZSTD`](/pkg/debug/elf/#COMPRESS_ZSTD).
 
-    <!-- https://go.dev/issue/60348, CL 496918 -->
-    The package now defines the constant
-    [`R_PPC64_REL24_P9NOTOC`](/pkg/debug/elf/#R_PPC64_REL24_P9NOTOC).
+<!-- https://go.dev/issue/60348, CL 496918 -->
+The package now defines the constant
+[`R_PPC64_REL24_P9NOTOC`](/pkg/debug/elf/#R_PPC64_REL24_P9NOTOC).
 
 <!-- debug/elf -->
 
-[debug/pe](/pkg/debug/pe/)
+#### [debug/pe](/pkg/debug/pe/)
 
-:   <!-- CL 488475 -->
-    Attempts to read from a section containing uninitialized data
-    using
-    [`Section.Data`](/pkg/debug/pe/#Section.Data)
-    or the reader returned by [`Section.Open`](/pkg/debug/pe/#Section.Open)
-    now return an error.
+<!-- CL 488475 -->
+Attempts to read from a section containing uninitialized data
+using
+[`Section.Data`](/pkg/debug/pe/#Section.Data)
+or the reader returned by [`Section.Open`](/pkg/debug/pe/#Section.Open)
+now return an error.
 
 <!-- debug/pe -->
 
-[embed](/pkg/embed/)
+#### [embed](/pkg/embed/)
 
-:   <!-- https://go.dev/issue/57803, CL 483235 -->
-    The [`io/fs.File`](/pkg/io/fs/#File)
-    returned by
-    [`FS.Open`](/pkg/embed/#FS.Open) now
-    has a `ReadAt` method that
-    implements [`io.ReaderAt`](/pkg/io/#ReaderAt).
+<!-- https://go.dev/issue/57803, CL 483235 -->
+The [`io/fs.File`](/pkg/io/fs/#File)
+returned by
+[`FS.Open`](/pkg/embed/#FS.Open) now
+has a `ReadAt` method that
+implements [`io.ReaderAt`](/pkg/io/#ReaderAt).
 
-    <!-- https://go.dev/issue/54451, CL 491175 -->
-    Calling <code>[FS.Open](/pkg/embed/FS.Open).[Stat](/pkg/io/fs/#File.Stat)</code>
-    will return a type that now implements a `String`
-    method that calls
-    [`io/fs.FormatFileInfo`](/pkg/io/fs/#FormatFileInfo).
+<!-- https://go.dev/issue/54451, CL 491175 -->
+Calling <code>[FS.Open](/pkg/embed/FS.Open).[Stat](/pkg/io/fs/#File.Stat)</code>
+will return a type that now implements a `String`
+method that calls
+[`io/fs.FormatFileInfo`](/pkg/io/fs/#FormatFileInfo).
 
 <!-- embed -->
 
-[encoding/binary](/pkg/encoding/binary/)
+#### [encoding/binary](/pkg/encoding/binary/)
 
-:   <!-- https://go.dev/issue/57237, CL 463218, CL 463985 -->
-    The new
-    [`NativeEndian`](/pkg/encoding/binary/#NativeEndian)
-    variable may be used to convert between byte slices and integers
-    using the current machine's native endianness.
+<!-- https://go.dev/issue/57237, CL 463218, CL 463985 -->
+The new
+[`NativeEndian`](/pkg/encoding/binary/#NativeEndian)
+variable may be used to convert between byte slices and integers
+using the current machine's native endianness.
 
 <!-- encoding/binary -->
 
-[errors](/pkg/errors/)
+#### [errors](/pkg/errors/)
 
-:   <!-- https://go.dev/issue/41198, CL 473935 -->
-    The new
-    [`ErrUnsupported`](/pkg/errors/#ErrUnsupported)
-    error provides a standardized way to indicate that a requested
-    operation may not be performed because it is unsupported.
-    For example, a call to
-    [`os.Link`](/pkg/os/#Link) when using a
-    file system that does not support hard links.
+<!-- https://go.dev/issue/41198, CL 473935 -->
+The new
+[`ErrUnsupported`](/pkg/errors/#ErrUnsupported)
+error provides a standardized way to indicate that a requested
+operation may not be performed because it is unsupported.
+For example, a call to
+[`os.Link`](/pkg/os/#Link) when using a
+file system that does not support hard links.
 
 <!-- errors -->
 
-[flag](/pkg/flag/)
+#### [flag](/pkg/flag/)
 
-:   <!-- https://go.dev/issue/53747, CL 476015 -->
-    The new [`BoolFunc`](/pkg/flag/#BoolFunc)
-    function and
-    [`FlagSet.BoolFunc`](/pkg/flag/#FlagSet.BoolFunc)
-    method define a flag that does not require an argument and calls
-    a function when the flag is used. This is similar to
-    [`Func`](/pkg/flag/#Func) but for a
-    boolean flag.
+<!-- https://go.dev/issue/53747, CL 476015 -->
+The new [`BoolFunc`](/pkg/flag/#BoolFunc)
+function and
+[`FlagSet.BoolFunc`](/pkg/flag/#FlagSet.BoolFunc)
+method define a flag that does not require an argument and calls
+a function when the flag is used. This is similar to
+[`Func`](/pkg/flag/#Func) but for a
+boolean flag.
 
-    <!-- CL 480215 -->
-    A flag definition
-    (via [`Bool`](/pkg/flag/#Bool),
-    [`BoolVar`](/pkg/flag/#BoolVar),
-    [`Int`](/pkg/flag/#Int),
-    [`IntVar`](/pkg/flag/#IntVar), etc.)
-    will panic if [`Set`](/pkg/flag/#Set) has
-    already been called on a flag with the same name. This change is
-    intended to detect cases where [changes in
-    initialization order](#language) cause flag operations to occur in a
-    different order than expected. In many cases the fix to this
-    problem is to introduce a explicit package dependence to
-    correctly order the definition before any
-    [`Set`](/pkg/flag/#Set) operations.
+<!-- CL 480215 -->
+A flag definition
+(via [`Bool`](/pkg/flag/#Bool),
+[`BoolVar`](/pkg/flag/#BoolVar),
+[`Int`](/pkg/flag/#Int),
+[`IntVar`](/pkg/flag/#IntVar), etc.)
+will panic if [`Set`](/pkg/flag/#Set) has
+already been called on a flag with the same name. This change is
+intended to detect cases where [changes in
+initialization order](#language) cause flag operations to occur in a
+different order than expected. In many cases the fix to this
+problem is to introduce a explicit package dependence to
+correctly order the definition before any
+[`Set`](/pkg/flag/#Set) operations.
 
 <!-- flag -->
 
-[go/ast](/pkg/go/ast/)
+#### [go/ast](/pkg/go/ast/)
 
-:   <!-- https://go.dev/issue/28089, CL 487935 -->
-    The new [`IsGenerated`](/pkg/go/ast/#IsGenerated) predicate
-    reports whether a file syntax tree contains the
-    [special comment](https://go.dev/s/generatedcode)
-    that conventionally indicates that the file was generated by a tool.
+<!-- https://go.dev/issue/28089, CL 487935 -->
+The new [`IsGenerated`](/pkg/go/ast/#IsGenerated) predicate
+reports whether a file syntax tree contains the
+[special comment](https://go.dev/s/generatedcode)
+that conventionally indicates that the file was generated by a tool.
 
-    <!-- https://go.dev/issue/59033, CL 476276 -->
-    The new
-    [`File.GoVersion`](/pkg/go/ast/#File.GoVersion)
-    field records the minimum Go version required by
-    any `//go:build` or `// +build`
-    directives.
+<!-- https://go.dev/issue/59033, CL 476276 -->
+The new
+[`File.GoVersion`](/pkg/go/ast/#File.GoVersion)
+field records the minimum Go version required by
+any `//go:build` or `// +build`
+directives.
 
 <!-- go/ast -->
 
-[go/build](/pkg/go/build/)
+#### [go/build](/pkg/go/build/)
 
-:   <!-- https://go.dev/issue/56986, CL 453603 -->
-    The package now parses build directives (comments that start
-    with `//go:`) in file headers (before
-    the `package` declaration). These directives are
-    available in the new
-    [`Package`](/pkg/go/build#Package) fields
-    [`Directives`](/pkg/go/build#Package.Directives),
-    [`TestDirectives`](/pkg/go/build#Package.TestDirectives),
-    and
-    [`XTestDirectives`](/pkg/go/build#Package.XTestDirectives).
+<!-- https://go.dev/issue/56986, CL 453603 -->
+The package now parses build directives (comments that start
+with `//go:`) in file headers (before
+the `package` declaration). These directives are
+available in the new
+[`Package`](/pkg/go/build#Package) fields
+[`Directives`](/pkg/go/build#Package.Directives),
+[`TestDirectives`](/pkg/go/build#Package.TestDirectives),
+and
+[`XTestDirectives`](/pkg/go/build#Package.XTestDirectives).
 
 <!-- go/build -->
 
-[go/build/constraint](/pkg/go/build/constraint/)
+#### [go/build/constraint](/pkg/go/build/constraint/)
 
-:   <!-- https://go.dev/issue/59033, CL 476275 -->
-    The new
-    [`GoVersion`](/pkg/go/build/constraint/#GoVersion)
-    function returns the minimum Go version implied by a build
-    expression.
+<!-- https://go.dev/issue/59033, CL 476275 -->
+The new
+[`GoVersion`](/pkg/go/build/constraint/#GoVersion)
+function returns the minimum Go version implied by a build
+expression.
 
 <!-- go/build/constraint -->
 
-[go/token](/pkg/go/token/)
+#### [go/token](/pkg/go/token/)
 
-:   <!-- https://go.dev/issue/57708, CL 464515 -->
-    The new [`File.Lines`](/pkg/go/token/#File.Lines) method
-    returns the file's line-number table in the same form as accepted by
-    `File.SetLines`.
+<!-- https://go.dev/issue/57708, CL 464515 -->
+The new [`File.Lines`](/pkg/go/token/#File.Lines) method
+returns the file's line-number table in the same form as accepted by
+`File.SetLines`.
 
 <!-- go/token -->
 
-[go/types](/pkg/go/types/)
+#### [go/types](/pkg/go/types/)
 
-:   <!-- https://go.dev/issue/61175, CL 507975 -->
-    The new [`Package.GoVersion`](/pkg/go/types/#Package.GoVersion)
-    method returns the Go language version used to check the package.
+<!-- https://go.dev/issue/61175, CL 507975 -->
+The new [`Package.GoVersion`](/pkg/go/types/#Package.GoVersion)
+method returns the Go language version used to check the package.
 
 <!-- go/types -->
 
-[hash/maphash](/pkg/hash/maphash/)
+#### [hash/maphash](/pkg/hash/maphash/)
 
-:   <!-- https://go.dev/issue/47342, CL 468795 -->
-    The `hash/maphash` package now has a pure Go implementation, selectable with the `purego` build tag.
+<!-- https://go.dev/issue/47342, CL 468795 -->
+The `hash/maphash` package now has a pure Go implementation, selectable with the `purego` build tag.
 
 <!-- hash/maphash -->
 
-[html/template](/pkg/html/template/)
+#### [html/template](/pkg/html/template/)
 
-:   <!-- https://go.dev/issue/59584, CL 496395 -->
-    The new error
-    [`ErrJSTemplate`](/pkg/html/template/#ErrJSTemplate)
-    is returned when an action appears in a JavaScript template
-    literal. Previously an unexported error was returned.
+<!-- https://go.dev/issue/59584, CL 496395 -->
+The new error
+[`ErrJSTemplate`](/pkg/html/template/#ErrJSTemplate)
+is returned when an action appears in a JavaScript template
+literal. Previously an unexported error was returned.
 
 <!-- html/template -->
 
-[io/fs](/pkg/io/fs/)
+#### [io/fs](/pkg/io/fs/)
 
-:   <!-- https://go.dev/issue/54451, CL 489555 -->
-    The new
-    [`FormatFileInfo`](/pkg/io/fs/#FormatFileInfo)
-    function returns a formatted version of a
-    [`FileInfo`](/pkg/io/fs/#FileInfo).
-    The new
-    [`FormatDirEntry`](/pkg/io/fs/#FormatDirEntry)
-    function returns a formatted version of a
-    [`DirEntry`](/pkg/io/fs/#FileInfo).
-    The implementation of
-    [`DirEntry`](/pkg/io/fs/#DirEntry)
-    returned by
-    [`ReadDir`](/pkg/io/fs/#ReadDir) now
-    implements a `String` method that calls
-    [`FormatDirEntry`](/pkg/io/fs/#FormatDirEntry),
-    and the same is true for
-    the [`DirEntry`](/pkg/io/fs/#DirEntry)
-    value passed to
-    [`WalkDirFunc`](/pkg/io/fs/#WalkDirFunc).
+<!-- https://go.dev/issue/54451, CL 489555 -->
+The new
+[`FormatFileInfo`](/pkg/io/fs/#FormatFileInfo)
+function returns a formatted version of a
+[`FileInfo`](/pkg/io/fs/#FileInfo).
+The new
+[`FormatDirEntry`](/pkg/io/fs/#FormatDirEntry)
+function returns a formatted version of a
+[`DirEntry`](/pkg/io/fs/#FileInfo).
+The implementation of
+[`DirEntry`](/pkg/io/fs/#DirEntry)
+returned by
+[`ReadDir`](/pkg/io/fs/#ReadDir) now
+implements a `String` method that calls
+[`FormatDirEntry`](/pkg/io/fs/#FormatDirEntry),
+and the same is true for
+the [`DirEntry`](/pkg/io/fs/#DirEntry)
+value passed to
+[`WalkDirFunc`](/pkg/io/fs/#WalkDirFunc).
 
 <!-- io/fs -->
 
@@ -772,322 +772,322 @@
 <!-- CL 459435 reverted by CL 467255 -->
 <!-- CL 467515 reverted by CL 499416 -->
 
-[math/big](/pkg/math/big/)
+#### [math/big](/pkg/math/big/)
 
-:   <!-- https://go.dev/issue/56984, CL 453115, CL 500116 -->
-    The new [`Int.Float64`](/pkg/math/big/#Int.Float64)
-    method returns the nearest floating-point value to a
-    multi-precision integer, along with an indication of any
-    rounding that occurred.
+<!-- https://go.dev/issue/56984, CL 453115, CL 500116 -->
+The new [`Int.Float64`](/pkg/math/big/#Int.Float64)
+method returns the nearest floating-point value to a
+multi-precision integer, along with an indication of any
+rounding that occurred.
 
 <!-- math/big -->
 
-[net](/pkg/net/)
+#### [net](/pkg/net/)
 
-:   <!-- https://go.dev/issue/59166, https://go.dev/issue/56539 -->
-    <!-- CL 471136, CL 471137, CL 471140 -->
-    On Linux, the [net](/pkg/net/) package can now use
-    Multipath TCP when the kernel supports it. It is not used by
-    default. To use Multipath TCP when available on a client, call
-    the
-    [`Dialer.SetMultipathTCP`](/pkg/net/#Dialer.SetMultipathTCP)
-    method before calling the
-    [`Dialer.Dial`](/pkg/net/#Dialer.Dial) or
-    [`Dialer.DialContext`](/pkg/net/#Dialer.DialContext)
-    methods. To use Multipath TCP when available on a server, call
-    the
-    [`ListenConfig.SetMultipathTCP`](/pkg/net/#ListenConfig.SetMultipathTCP)
-    method before calling the
-    [`ListenConfig.Listen`](/pkg/net/#ListenConfig.Listen)
-    method. Specify the network as `"tcp"` or
-    `"tcp4"` or `"tcp6"` as usual. If
-    Multipath TCP is not supported by the kernel or the remote host,
-    the connection will silently fall back to TCP. To test whether a
-    particular connection is using Multipath TCP, use the
-    [`TCPConn.MultipathTCP`](/pkg/net/#TCPConn.MultipathTCP)
-    method.
+<!-- https://go.dev/issue/59166, https://go.dev/issue/56539 -->
+<!-- CL 471136, CL 471137, CL 471140 -->
+On Linux, the [net](/pkg/net/) package can now use
+Multipath TCP when the kernel supports it. It is not used by
+default. To use Multipath TCP when available on a client, call
+the
+[`Dialer.SetMultipathTCP`](/pkg/net/#Dialer.SetMultipathTCP)
+method before calling the
+[`Dialer.Dial`](/pkg/net/#Dialer.Dial) or
+[`Dialer.DialContext`](/pkg/net/#Dialer.DialContext)
+methods. To use Multipath TCP when available on a server, call
+the
+[`ListenConfig.SetMultipathTCP`](/pkg/net/#ListenConfig.SetMultipathTCP)
+method before calling the
+[`ListenConfig.Listen`](/pkg/net/#ListenConfig.Listen)
+method. Specify the network as `"tcp"` or
+`"tcp4"` or `"tcp6"` as usual. If
+Multipath TCP is not supported by the kernel or the remote host,
+the connection will silently fall back to TCP. To test whether a
+particular connection is using Multipath TCP, use the
+[`TCPConn.MultipathTCP`](/pkg/net/#TCPConn.MultipathTCP)
+method.
 
-    In a future Go release we may enable Multipath TCP by default on
-    systems that support it.
+In a future Go release we may enable Multipath TCP by default on
+systems that support it.
 
 <!-- net -->
 
-[net/http](/pkg/net/http/)
+#### [net/http](/pkg/net/http/)
 
-:   <!-- CL 472636 -->
-    The new [`ResponseController.EnableFullDuplex`](/pkg/net/http#ResponseController.EnableFullDuplex)
-    method allows server handlers to concurrently read from an HTTP/1
-    request body while writing the response. Normally, the HTTP/1 server
-    automatically consumes any remaining request body before starting to
-    write the response, to avoid deadlocking clients which attempt to
-    write a complete request before reading the response. The
-    `EnableFullDuplex` method disables this behavior.
+<!-- CL 472636 -->
+The new [`ResponseController.EnableFullDuplex`](/pkg/net/http#ResponseController.EnableFullDuplex)
+method allows server handlers to concurrently read from an HTTP/1
+request body while writing the response. Normally, the HTTP/1 server
+automatically consumes any remaining request body before starting to
+write the response, to avoid deadlocking clients which attempt to
+write a complete request before reading the response. The
+`EnableFullDuplex` method disables this behavior.
 
-    <!-- https://go.dev/issue/44855, CL 382117 -->
-    The new [`ErrSchemeMismatch`](/pkg/net/http/#ErrSchemeMismatch) error is returned by [`Client`](/pkg/net/http/#Client) and [`Transport`](/pkg/net/http/#Transport) when the server responds to an HTTPS request with an HTTP response.
+<!-- https://go.dev/issue/44855, CL 382117 -->
+The new [`ErrSchemeMismatch`](/pkg/net/http/#ErrSchemeMismatch) error is returned by [`Client`](/pkg/net/http/#Client) and [`Transport`](/pkg/net/http/#Transport) when the server responds to an HTTPS request with an HTTP response.
 
-    <!-- CL 494122 -->
-    The [net/http](/pkg/net/http/) package now supports
-    [`errors.ErrUnsupported`](/pkg/errors/#ErrUnsupported),
-    in that the expression
-    `errors.Is(http.ErrNotSupported, errors.ErrUnsupported)`
-    will return true.
+<!-- CL 494122 -->
+The [net/http](/pkg/net/http/) package now supports
+[`errors.ErrUnsupported`](/pkg/errors/#ErrUnsupported),
+in that the expression
+`errors.Is(http.ErrNotSupported, errors.ErrUnsupported)`
+will return true.
 
 <!-- net/http -->
 
-[os](/pkg/os/)
+#### [os](/pkg/os/)
 
-:   <!-- https://go.dev/issue/32558, CL 219638 -->
-    Programs may now pass an empty `time.Time` value to
-    the [`Chtimes`](/pkg/os/#Chtimes) function
-    to leave either the access time or the modification time unchanged.
+<!-- https://go.dev/issue/32558, CL 219638 -->
+Programs may now pass an empty `time.Time` value to
+the [`Chtimes`](/pkg/os/#Chtimes) function
+to leave either the access time or the modification time unchanged.
 
-    <!-- CL 480135 -->
-    On Windows the
-    [`File.Chdir`](/pkg/os#File.Chdir) method
-    now changes the current directory to the file, rather than
-    always returning an error.
+<!-- CL 480135 -->
+On Windows the
+[`File.Chdir`](/pkg/os#File.Chdir) method
+now changes the current directory to the file, rather than
+always returning an error.
 
-    <!-- CL 495079 -->
-    On Unix systems, if a non-blocking descriptor is passed
-    to [`NewFile`](/pkg/os/#NewFile), calling
-    the [`File.Fd`](/pkg/os/#File.Fd) method
-    will now return a non-blocking descriptor. Previously the
-    descriptor was converted to blocking mode.
+<!-- CL 495079 -->
+On Unix systems, if a non-blocking descriptor is passed
+to [`NewFile`](/pkg/os/#NewFile), calling
+the [`File.Fd`](/pkg/os/#File.Fd) method
+will now return a non-blocking descriptor. Previously the
+descriptor was converted to blocking mode.
 
-    <!-- CL 477215 -->
-    On Windows calling
-    [`Truncate`](/pkg/os/#Truncate) on a
-    non-existent file used to create an empty file. It now returns
-    an error indicating that the file does not exist.
+<!-- CL 477215 -->
+On Windows calling
+[`Truncate`](/pkg/os/#Truncate) on a
+non-existent file used to create an empty file. It now returns
+an error indicating that the file does not exist.
 
-    <!-- https://go.dev/issue/56899, CL 463219 -->
-    On Windows calling
-    [`TempDir`](/pkg/os/#TempDir) now uses
-    GetTempPath2W when available, instead of GetTempPathW. The
-    new behavior is a security hardening measure that prevents
-    temporary files created by processes running as SYSTEM to
-    be accessed by non-SYSTEM processes.
+<!-- https://go.dev/issue/56899, CL 463219 -->
+On Windows calling
+[`TempDir`](/pkg/os/#TempDir) now uses
+GetTempPath2W when available, instead of GetTempPathW. The
+new behavior is a security hardening measure that prevents
+temporary files created by processes running as SYSTEM to
+be accessed by non-SYSTEM processes.
 
-    <!-- CL 493036 -->
-    On Windows the os package now supports working with files whose
-    names, stored as UTF-16, can't be represented as valid UTF-8.
+<!-- CL 493036 -->
+On Windows the os package now supports working with files whose
+names, stored as UTF-16, can't be represented as valid UTF-8.
 
-    <!-- CL 463177 -->
-    On Windows [`Lstat`](/pkg/os/#Lstat) now resolves
-    symbolic links for paths ending with a path separator, consistent with its
-    behavior on POSIX platforms.
+<!-- CL 463177 -->
+On Windows [`Lstat`](/pkg/os/#Lstat) now resolves
+symbolic links for paths ending with a path separator, consistent with its
+behavior on POSIX platforms.
 
-    <!-- https://go.dev/issue/54451, CL 491175 -->
-    The implementation of the
-    [`io/fs.DirEntry`](/pkg/io/fs/#DirEntry)
-    interface returned by the
-    [`ReadDir`](/pkg/os/#ReadDir) function and
-    the [`File.ReadDir`](/pkg/os/#File.ReadDir)
-    method now implements a `String` method that calls
-    [`io/fs.FormatDirEntry`](/pkg/io/fs/#FormatDirEntry).
+<!-- https://go.dev/issue/54451, CL 491175 -->
+The implementation of the
+[`io/fs.DirEntry`](/pkg/io/fs/#DirEntry)
+interface returned by the
+[`ReadDir`](/pkg/os/#ReadDir) function and
+the [`File.ReadDir`](/pkg/os/#File.ReadDir)
+method now implements a `String` method that calls
+[`io/fs.FormatDirEntry`](/pkg/io/fs/#FormatDirEntry).
 
-    <!-- https://go.dev/issue/53761, CL 416775, CL 498015-->
-    The implementation of the
-    [`io/fs.FS`](/pkg/io/fs/#FS) interface returned by
-    the [`DirFS`](/pkg/os/#DirFS) function now implements
-    the [`io/fs.ReadFileFS`](/pkg/io/fs/#ReadFileFS) and
-    the [`io/fs.ReadDirFS`](/pkg/io/fs/#ReadDirFS)
-    interfaces.
+<!-- https://go.dev/issue/53761, CL 416775, CL 498015-->
+The implementation of the
+[`io/fs.FS`](/pkg/io/fs/#FS) interface returned by
+the [`DirFS`](/pkg/os/#DirFS) function now implements
+the [`io/fs.ReadFileFS`](/pkg/io/fs/#ReadFileFS) and
+the [`io/fs.ReadDirFS`](/pkg/io/fs/#ReadDirFS)
+interfaces.
 
 <!-- os -->
 
-[path/filepath](/pkg/path/filepath/)
+#### [path/filepath](/pkg/path/filepath/)
 
-:   The implementation of the
-    [`io/fs.DirEntry`](/pkg/io/fs/#DirEntry)
-    interface passed to the function argument of
-    [`WalkDir`](/pkg/path/filepath/#WalkDir)
-    now implements a `String` method that calls
-    [`io/fs.FormatDirEntry`](/pkg/io/fs/#FormatDirEntry).
+The implementation of the
+[`io/fs.DirEntry`](/pkg/io/fs/#DirEntry)
+interface passed to the function argument of
+[`WalkDir`](/pkg/path/filepath/#WalkDir)
+now implements a `String` method that calls
+[`io/fs.FormatDirEntry`](/pkg/io/fs/#FormatDirEntry).
 
 <!-- path/filepath -->
 
 <!-- CL 459455 reverted -->
 
-[reflect](/pkg/reflect/)
+#### [reflect](/pkg/reflect/)
 
-:   <!-- CL 408826, CL 413474 -->
-    In Go 1.21, [`ValueOf`](/pkg/reflect/#ValueOf)
-    no longer forces its argument to be allocated on the heap, allowing
-    a `Value`'s content to be allocated on the stack. Most
-    operations on a `Value` also allow the underlying value
-    to be stack allocated.
+<!-- CL 408826, CL 413474 -->
+In Go 1.21, [`ValueOf`](/pkg/reflect/#ValueOf)
+no longer forces its argument to be allocated on the heap, allowing
+a `Value`'s content to be allocated on the stack. Most
+operations on a `Value` also allow the underlying value
+to be stack allocated.
 
-    <!-- https://go.dev/issue/55002 -->
-    The new [`Value`](/pkg/reflect/#Value)
-    method [`Value.Clear`](/pkg/reflect/#Value.Clear)
-    clears the contents of a map or zeros the contents of a slice.
-    This corresponds to the new `clear` built-in
-    [added to the language](#language).
+<!-- https://go.dev/issue/55002 -->
+The new [`Value`](/pkg/reflect/#Value)
+method [`Value.Clear`](/pkg/reflect/#Value.Clear)
+clears the contents of a map or zeros the contents of a slice.
+This corresponds to the new `clear` built-in
+[added to the language](#language).
 
-    <!-- https://go.dev/issue/56906, CL 452762 -->
-    The [`SliceHeader`](/pkg/reflect/#SliceHeader)
-    and [`StringHeader`](/pkg/reflect/#StringHeader)
-    types are now deprecated. In new code
-    prefer [`unsafe.Slice`](/pkg/unsafe/#Slice),
-    [`unsafe.SliceData`](/pkg/unsafe/#SliceData),
-    [`unsafe.String`](/pkg/unsafe/#String),
-    or [`unsafe.StringData`](/pkg/unsafe/#StringData).
+<!-- https://go.dev/issue/56906, CL 452762 -->
+The [`SliceHeader`](/pkg/reflect/#SliceHeader)
+and [`StringHeader`](/pkg/reflect/#StringHeader)
+types are now deprecated. In new code
+prefer [`unsafe.Slice`](/pkg/unsafe/#Slice),
+[`unsafe.SliceData`](/pkg/unsafe/#SliceData),
+[`unsafe.String`](/pkg/unsafe/#String),
+or [`unsafe.StringData`](/pkg/unsafe/#StringData).
 
 <!-- reflect -->
 
-[regexp](/pkg/regexp/)
+#### [regexp](/pkg/regexp/)
 
-:   <!-- https://go.dev/issue/46159, CL 479401 -->
-    [`Regexp`](/pkg/regexp#Regexp) now defines
-    [`MarshalText`](/pkg/regexp#Regexp.MarshalText)
-    and [`UnmarshalText`](/pkg/regexp#Regexp.UnmarshalText)
-    methods. These implement
-    [`encoding.TextMarshaler`](/pkg/encoding#TextMarshaler)
-    and
-    [`encoding.TextUnmarshaler`](/pkg/encoding#TextUnmarshaler)
-    and will be used by packages such as
-    [encoding/json](/pkg/encoding/json).
+<!-- https://go.dev/issue/46159, CL 479401 -->
+[`Regexp`](/pkg/regexp#Regexp) now defines
+[`MarshalText`](/pkg/regexp#Regexp.MarshalText)
+and [`UnmarshalText`](/pkg/regexp#Regexp.UnmarshalText)
+methods. These implement
+[`encoding.TextMarshaler`](/pkg/encoding#TextMarshaler)
+and
+[`encoding.TextUnmarshaler`](/pkg/encoding#TextUnmarshaler)
+and will be used by packages such as
+[encoding/json](/pkg/encoding/json).
 
 <!-- regexp -->
 
-[runtime](/pkg/runtime/)
+#### [runtime](/pkg/runtime/)
 
-:   <!-- https://go.dev/issue/38651, CL 435337 -->
-    Textual stack traces produced by Go programs, such as those
-    produced when crashing, calling `runtime.Stack`, or
-    collecting a goroutine profile with `debug=2`, now
-    include the IDs of the goroutines that created each goroutine in
-    the stack trace.
+<!-- https://go.dev/issue/38651, CL 435337 -->
+Textual stack traces produced by Go programs, such as those
+produced when crashing, calling `runtime.Stack`, or
+collecting a goroutine profile with `debug=2`, now
+include the IDs of the goroutines that created each goroutine in
+the stack trace.
 
-    <!-- https://go.dev/issue/57441, CL 474915 -->
-    Crashing Go applications can now opt-in to Windows Error Reporting (WER) by setting the environment variable
-    `GOTRACEBACK=wer` or calling [`debug.SetTraceback("wer")`](/pkg/runtime/debug/#SetTraceback)
-    before the crash. Other than enabling WER, the runtime will behave as with `GOTRACEBACK=crash`.
-    On non-Windows systems, `GOTRACEBACK=wer` is ignored.
+<!-- https://go.dev/issue/57441, CL 474915 -->
+Crashing Go applications can now opt-in to Windows Error Reporting (WER) by setting the environment variable
+`GOTRACEBACK=wer` or calling [`debug.SetTraceback("wer")`](/pkg/runtime/debug/#SetTraceback)
+before the crash. Other than enabling WER, the runtime will behave as with `GOTRACEBACK=crash`.
+On non-Windows systems, `GOTRACEBACK=wer` is ignored.
 
-    <!-- CL 447778 -->
-    `GODEBUG=cgocheck=2`, a thorough checker of cgo pointer passing rules,
-    is no longer available as a [debug option](/pkg/runtime#hdr-Environment_Variables).
-    Instead, it is available as an experiment using `GOEXPERIMENT=cgocheck2`.
-    In particular this means that this mode has to be selected at build time instead of startup time.
+<!-- CL 447778 -->
+`GODEBUG=cgocheck=2`, a thorough checker of cgo pointer passing rules,
+is no longer available as a [debug option](/pkg/runtime#hdr-Environment_Variables).
+Instead, it is available as an experiment using `GOEXPERIMENT=cgocheck2`.
+In particular this means that this mode has to be selected at build time instead of startup time.
 
-    `GODEBUG=cgocheck=1` is still available (and is still the default).
+`GODEBUG=cgocheck=1` is still available (and is still the default).
 
-    <!-- https://go.dev/issue/46787, CL 367296 -->
-    A new type `Pinner` has been added to the runtime
-    package. `Pinner`s may be used to "pin" Go memory
-    such that it may be used more freely by non-Go code. For instance,
-    passing Go values that reference pinned Go memory to C code is
-    now allowed. Previously, passing any such nested reference was
-    disallowed by the
-    [cgo pointer passing rules.](https://pkg.go.dev/cmd/cgo#hdr-Passing_pointers)
-    See [the docs](/pkg/runtime#Pinner) for more details.
+<!-- https://go.dev/issue/46787, CL 367296 -->
+A new type `Pinner` has been added to the runtime
+package. `Pinner`s may be used to "pin" Go memory
+such that it may be used more freely by non-Go code. For instance,
+passing Go values that reference pinned Go memory to C code is
+now allowed. Previously, passing any such nested reference was
+disallowed by the
+[cgo pointer passing rules.](https://pkg.go.dev/cmd/cgo#hdr-Passing_pointers)
+See [the docs](/pkg/runtime#Pinner) for more details.
 
-    <!-- CL 472195 no release note needed -->
+<!-- CL 472195 no release note needed -->
 
 <!-- runtime -->
 
-[runtime/metrics](/pkg/runtime/metrics/)
+#### [runtime/metrics](/pkg/runtime/metrics/)
 
-:   <!-- https://go.dev/issue/56857, CL 497315 -->
-    A few previously-internal GC metrics, such as live heap size, are
-    now available.
-    `GOGC` and `GOMEMLIMIT` are also now
-    available as metrics.
+<!-- https://go.dev/issue/56857, CL 497315 -->
+A few previously-internal GC metrics, such as live heap size, are
+now available.
+`GOGC` and `GOMEMLIMIT` are also now
+available as metrics.
 
 <!-- runtime/metrics -->
 
-[runtime/trace](/pkg/runtime/trace/)
+#### [runtime/trace](/pkg/runtime/trace/)
 
-:   <!-- https://go.dev/issue/16638 -->
-    Collecting traces on amd64 and arm64 now incurs a substantially
-    smaller CPU cost: up to a 10x improvement over the previous release.
+<!-- https://go.dev/issue/16638 -->
+Collecting traces on amd64 and arm64 now incurs a substantially
+smaller CPU cost: up to a 10x improvement over the previous release.
 
-    <!-- CL 494495 -->
-    Traces now contain explicit stop-the-world events for every reason
-    the Go runtime might stop-the-world, not just garbage collection.
+<!-- CL 494495 -->
+Traces now contain explicit stop-the-world events for every reason
+the Go runtime might stop-the-world, not just garbage collection.
 
 <!-- runtime/trace -->
 
-[sync](/pkg/sync/)
+#### [sync](/pkg/sync/)
 
-:   <!-- https://go.dev/issue/56102, CL 451356 -->
-    The new [`OnceFunc`](/pkg/sync/#OnceFunc),
-    [`OnceValue`](/pkg/sync/#OnceValue), and
-    [`OnceValues`](/pkg/sync/#OnceValues)
-    functions capture a common use of [Once](/pkg/sync/#Once) to
-    lazily initialize a value on first use.
+<!-- https://go.dev/issue/56102, CL 451356 -->
+The new [`OnceFunc`](/pkg/sync/#OnceFunc),
+[`OnceValue`](/pkg/sync/#OnceValue), and
+[`OnceValues`](/pkg/sync/#OnceValues)
+functions capture a common use of [Once](/pkg/sync/#Once) to
+lazily initialize a value on first use.
 
-[syscall](/pkg/syscall/)
+#### [syscall](/pkg/syscall/)
 
-:   <!-- CL 480135 -->
-    On Windows the
-    [`Fchdir`](/pkg/syscall#Fchdir) function
-    now changes the current directory to its argument, rather than
-    always returning an error.
+<!-- CL 480135 -->
+On Windows the
+[`Fchdir`](/pkg/syscall#Fchdir) function
+now changes the current directory to its argument, rather than
+always returning an error.
 
-    <!-- https://go.dev/issue/46259, CL 458335 -->
-    On FreeBSD
-    [`SysProcAttr`](/pkg/syscall#SysProcAttr)
-    has a new field `Jail` that may be used to put the
-    newly created process in a jailed environment.
+<!-- https://go.dev/issue/46259, CL 458335 -->
+On FreeBSD
+[`SysProcAttr`](/pkg/syscall#SysProcAttr)
+has a new field `Jail` that may be used to put the
+newly created process in a jailed environment.
 
-    <!-- CL 493036 -->
-    On Windows the syscall package now supports working with files whose
-    names, stored as UTF-16, can't be represented as valid UTF-8.
-    The [`UTF16ToString`](/pkg/syscall#UTF16ToString)
-    and [`UTF16FromString`](/pkg/syscall#UTF16FromString)
-    functions now convert between UTF-16 data and
-    [WTF-8](https://simonsapin.github.io/wtf-8/) strings.
-    This is backward compatible as WTF-8 is a superset of the UTF-8
-    format that was used in earlier releases.
+<!-- CL 493036 -->
+On Windows the syscall package now supports working with files whose
+names, stored as UTF-16, can't be represented as valid UTF-8.
+The [`UTF16ToString`](/pkg/syscall#UTF16ToString)
+and [`UTF16FromString`](/pkg/syscall#UTF16FromString)
+functions now convert between UTF-16 data and
+[WTF-8](https://simonsapin.github.io/wtf-8/) strings.
+This is backward compatible as WTF-8 is a superset of the UTF-8
+format that was used in earlier releases.
 
-    <!-- CL 476578, CL 476875, CL 476916 -->
-    Several error values match the new
-    [`errors.ErrUnsupported`](/pkg/errors/#ErrUnsupported),
-    such that `errors.Is(err, errors.ErrUnsupported)`
-    returns true.
+<!-- CL 476578, CL 476875, CL 476916 -->
+Several error values match the new
+[`errors.ErrUnsupported`](/pkg/errors/#ErrUnsupported),
+such that `errors.Is(err, errors.ErrUnsupported)`
+returns true.
 
-      - `ENOSYS`
-      - `ENOTSUP`
-      - `EOPNOTSUPP`
-      - `EPLAN9` (Plan 9 only)
-      - `ERROR_CALL_NOT_IMPLEMENTED` (Windows only)
-      - `ERROR_NOT_SUPPORTED` (Windows only)
-      - `EWINDOWS` (Windows only)
+  - `ENOSYS`
+  - `ENOTSUP`
+  - `EOPNOTSUPP`
+  - `EPLAN9` (Plan 9 only)
+  - `ERROR_CALL_NOT_IMPLEMENTED` (Windows only)
+  - `ERROR_NOT_SUPPORTED` (Windows only)
+  - `EWINDOWS` (Windows only)
 
 
 <!-- syscall -->
 
-[testing](/pkg/testing/)
+#### [testing](/pkg/testing/)
 
-:   <!-- https://go.dev/issue/37708, CL 463837 -->
-    The new `-test.fullpath` option will print full path
-    names in test log messages, rather than just base names.
+<!-- https://go.dev/issue/37708, CL 463837 -->
+The new `-test.fullpath` option will print full path
+names in test log messages, rather than just base names.
 
-    <!-- https://go.dev/issue/52600, CL 475496 -->
-    The new [`Testing`](/pkg/testing/#Testing) function reports whether the program is a test created by `go` `test`.
+<!-- https://go.dev/issue/52600, CL 475496 -->
+The new [`Testing`](/pkg/testing/#Testing) function reports whether the program is a test created by `go` `test`.
 
 <!-- testing -->
 
-[testing/fstest](/pkg/testing/fstest/)
+#### [testing/fstest](/pkg/testing/fstest/)
 
-:   <!-- https://go.dev/issue/54451, CL 491175 -->
-    Calling <code>[Open](/pkg/testing/fstest/MapFS.Open).[Stat](/pkg/io/fs/#File.Stat)</code>
-    will return a type that now implements a `String`
-    method that calls
-    [`io/fs.FormatFileInfo`](/pkg/io/fs/#FormatFileInfo).
+<!-- https://go.dev/issue/54451, CL 491175 -->
+Calling <code>[Open](/pkg/testing/fstest/MapFS.Open).[Stat](/pkg/io/fs/#File.Stat)</code>
+will return a type that now implements a `String`
+method that calls
+[`io/fs.FormatFileInfo`](/pkg/io/fs/#FormatFileInfo).
 
 <!-- testing/fstest -->
 
-[unicode](/pkg/unicode/)
+#### [unicode](/pkg/unicode/)
 
-:   <!-- CL 456837 -->
-    The [`unicode`](/pkg/unicode/) package and
-    associated support throughout the system has been upgraded to
-    [Unicode 15.0.0](https://www.unicode.org/versions/Unicode15.0.0/).
+<!-- CL 456837 -->
+The [`unicode`](/pkg/unicode/) package and
+associated support throughout the system has been upgraded to
+[Unicode 15.0.0](https://www.unicode.org/versions/Unicode15.0.0/).
 
 <!-- unicode -->
 
diff --git a/_content/doc/go1.7.md b/_content/doc/go1.7.md
index 708712e..3b64ae8 100644
--- a/_content/doc/go1.7.md
+++ b/_content/doc/go1.7.md
@@ -399,545 +399,545 @@
 made with the Go 1 [promise of compatibility](/doc/go1compat)
 in mind.
 
-[bufio](/pkg/bufio/)
+#### [bufio](/pkg/bufio/)
 
-:   In previous releases of Go, if
-    [`Reader`](/pkg/bufio/#Reader)'s
-    [`Peek`](/pkg/bufio/#Reader.Peek) method
-    were asked for more bytes than fit in the underlying buffer,
-    it would return an empty slice and the error `ErrBufferFull`.
-    Now it returns the entire underlying buffer, still accompanied by the error `ErrBufferFull`.
+In previous releases of Go, if
+[`Reader`](/pkg/bufio/#Reader)'s
+[`Peek`](/pkg/bufio/#Reader.Peek) method
+were asked for more bytes than fit in the underlying buffer,
+it would return an empty slice and the error `ErrBufferFull`.
+Now it returns the entire underlying buffer, still accompanied by the error `ErrBufferFull`.
 
-[bytes](/pkg/bytes/)
+#### [bytes](/pkg/bytes/)
 
-:   The new functions
-    [`ContainsAny`](/pkg/bytes/#ContainsAny) and
-    [`ContainsRune`](/pkg/bytes/#ContainsRune)
-    have been added for symmetry with
-    the [`strings`](/pkg/strings/) package.
+The new functions
+[`ContainsAny`](/pkg/bytes/#ContainsAny) and
+[`ContainsRune`](/pkg/bytes/#ContainsRune)
+have been added for symmetry with
+the [`strings`](/pkg/strings/) package.
 
-    In previous releases of Go, if
-    [`Reader`](/pkg/bytes/#Reader)'s
-    [`Read`](/pkg/bytes/#Reader.Read) method
-    were asked for zero bytes with no data remaining, it would
-    return a count of 0 and no error.
-    Now it returns a count of 0 and the error
-    [`io.EOF`](/pkg/io/#EOF).
+In previous releases of Go, if
+[`Reader`](/pkg/bytes/#Reader)'s
+[`Read`](/pkg/bytes/#Reader.Read) method
+were asked for zero bytes with no data remaining, it would
+return a count of 0 and no error.
+Now it returns a count of 0 and the error
+[`io.EOF`](/pkg/io/#EOF).
 
-    The
-    [`Reader`](/pkg/bytes/#Reader) type has a new method
-    [`Reset`](/pkg/bytes/#Reader.Reset) to allow reuse of a `Reader`.
+The
+[`Reader`](/pkg/bytes/#Reader) type has a new method
+[`Reset`](/pkg/bytes/#Reader.Reset) to allow reuse of a `Reader`.
 
-[compress/flate](/pkg/compress/flate/)
+#### [compress/flate](/pkg/compress/flate/)
 
-:   There are many performance optimizations throughout the package.
-    Decompression speed is improved by about 10%,
-    while compression for `DefaultCompression` is twice as fast.
+There are many performance optimizations throughout the package.
+Decompression speed is improved by about 10%,
+while compression for `DefaultCompression` is twice as fast.
 
-    In addition to those general improvements,
-    the
-    `BestSpeed`
-    compressor has been replaced entirely and uses an
-    algorithm similar to [Snappy](https://github.com/google/snappy),
-    resulting in about a 2.5X speed increase,
-    although the output can be 5-10% larger than with the previous algorithm.
+In addition to those general improvements,
+the
+`BestSpeed`
+compressor has been replaced entirely and uses an
+algorithm similar to [Snappy](https://github.com/google/snappy),
+resulting in about a 2.5X speed increase,
+although the output can be 5-10% larger than with the previous algorithm.
 
-    There is also a new compression level
-    `HuffmanOnly`
-    that applies Huffman but not Lempel-Ziv encoding.
-    [Forgoing Lempel-Ziv encoding](https://blog.klauspost.com/constant-time-gzipzip-compression/) means that
-    `HuffmanOnly` runs about 3X faster than the new `BestSpeed`
-    but at the cost of producing compressed outputs that are 20-40% larger than those
-    generated by the new `BestSpeed`.
+There is also a new compression level
+`HuffmanOnly`
+that applies Huffman but not Lempel-Ziv encoding.
+[Forgoing Lempel-Ziv encoding](https://blog.klauspost.com/constant-time-gzipzip-compression/) means that
+`HuffmanOnly` runs about 3X faster than the new `BestSpeed`
+but at the cost of producing compressed outputs that are 20-40% larger than those
+generated by the new `BestSpeed`.
 
-    It is important to note that both
-    `BestSpeed` and `HuffmanOnly` produce a compressed output that is
-    [RFC 1951](https://tools.ietf.org/html/rfc1951) compliant.
-    In other words, any valid DEFLATE decompressor will continue to be able to decompress these outputs.
+It is important to note that both
+`BestSpeed` and `HuffmanOnly` produce a compressed output that is
+[RFC 1951](https://tools.ietf.org/html/rfc1951) compliant.
+In other words, any valid DEFLATE decompressor will continue to be able to decompress these outputs.
 
-    Lastly, there is a minor change to the decompressor's implementation of
-    [`io.Reader`](/pkg/io/#Reader). In previous versions,
-    the decompressor deferred reporting
-    [`io.EOF`](/pkg/io/#EOF) until exactly no more bytes could be read.
-    Now, it reports
-    [`io.EOF`](/pkg/io/#EOF) more eagerly when reading the last set of bytes.
+Lastly, there is a minor change to the decompressor's implementation of
+[`io.Reader`](/pkg/io/#Reader). In previous versions,
+the decompressor deferred reporting
+[`io.EOF`](/pkg/io/#EOF) until exactly no more bytes could be read.
+Now, it reports
+[`io.EOF`](/pkg/io/#EOF) more eagerly when reading the last set of bytes.
 
-[crypto/tls](/pkg/crypto/tls/)
+#### [crypto/tls](/pkg/crypto/tls/)
 
-:   The TLS implementation sends the first few data packets on each connection
-    using small record sizes, gradually increasing to the TLS maximum record size.
-    This heuristic reduces the amount of data that must be received before
-    the first packet can be decrypted, improving communication latency over
-    low-bandwidth networks.
-    Setting
-    [`Config`](/pkg/crypto/tls/#Config)'s
-    `DynamicRecordSizingDisabled` field to true
-    forces the behavior of Go 1.6 and earlier, where packets are
-    as large as possible from the start of the connection.
+The TLS implementation sends the first few data packets on each connection
+using small record sizes, gradually increasing to the TLS maximum record size.
+This heuristic reduces the amount of data that must be received before
+the first packet can be decrypted, improving communication latency over
+low-bandwidth networks.
+Setting
+[`Config`](/pkg/crypto/tls/#Config)'s
+`DynamicRecordSizingDisabled` field to true
+forces the behavior of Go 1.6 and earlier, where packets are
+as large as possible from the start of the connection.
 
-    The TLS client now has optional, limited support for server-initiated renegotiation,
-    enabled by setting the
-    [`Config`](/pkg/crypto/tls/#Config)'s
-    `Renegotiation` field.
-    This is needed for connecting to many Microsoft Azure servers.
+The TLS client now has optional, limited support for server-initiated renegotiation,
+enabled by setting the
+[`Config`](/pkg/crypto/tls/#Config)'s
+`Renegotiation` field.
+This is needed for connecting to many Microsoft Azure servers.
 
-    The errors returned by the package now consistently begin with a
-    `tls:` prefix.
-    In past releases, some errors used a `crypto/tls:` prefix,
-    some used a `tls:` prefix, and some had no prefix at all.
+The errors returned by the package now consistently begin with a
+`tls:` prefix.
+In past releases, some errors used a `crypto/tls:` prefix,
+some used a `tls:` prefix, and some had no prefix at all.
 
-    When generating self-signed certificates, the package no longer sets the
-    “Authority Key Identifier” field by default.
+When generating self-signed certificates, the package no longer sets the
+“Authority Key Identifier” field by default.
 
-[crypto/x509](/pkg/crypto/x509/)
+#### [crypto/x509](/pkg/crypto/x509/)
 
-:   The new function
-    [`SystemCertPool`](/pkg/crypto/x509/#SystemCertPool)
-    provides access to the entire system certificate pool if available.
-    There is also a new associated error type
-    [`SystemRootsError`](/pkg/crypto/x509/#SystemRootsError).
+The new function
+[`SystemCertPool`](/pkg/crypto/x509/#SystemCertPool)
+provides access to the entire system certificate pool if available.
+There is also a new associated error type
+[`SystemRootsError`](/pkg/crypto/x509/#SystemRootsError).
 
-[debug/dwarf](/pkg/debug/dwarf/)
+#### [debug/dwarf](/pkg/debug/dwarf/)
 
-:   The
-    [`Reader`](/pkg/debug/dwarf/#Reader) type's new
-    [`SeekPC`](/pkg/debug/dwarf/#Reader.SeekPC) method and the
-    [`Data`](/pkg/debug/dwarf/#Data) type's new
-    [`Ranges`](/pkg/debug/dwarf/#Ranges) method
-    help to find the compilation unit to pass to a
-    [`LineReader`](/pkg/debug/dwarf/#LineReader)
-    and to identify the specific function for a given program counter.
+The
+[`Reader`](/pkg/debug/dwarf/#Reader) type's new
+[`SeekPC`](/pkg/debug/dwarf/#Reader.SeekPC) method and the
+[`Data`](/pkg/debug/dwarf/#Data) type's new
+[`Ranges`](/pkg/debug/dwarf/#Ranges) method
+help to find the compilation unit to pass to a
+[`LineReader`](/pkg/debug/dwarf/#LineReader)
+and to identify the specific function for a given program counter.
 
-[debug/elf](/pkg/debug/elf/)
+#### [debug/elf](/pkg/debug/elf/)
 
-:   The new
-    [`R_390`](/pkg/debug/elf/#R_390) relocation type
-    and its many predefined constants
-    support the S390 port.
+The new
+[`R_390`](/pkg/debug/elf/#R_390) relocation type
+and its many predefined constants
+support the S390 port.
 
-[encoding/asn1](/pkg/encoding/asn1/)
+#### [encoding/asn1](/pkg/encoding/asn1/)
 
-:   The ASN.1 decoder now rejects non-minimal integer encodings.
-    This may cause the package to reject some invalid but formerly accepted ASN.1 data.
+The ASN.1 decoder now rejects non-minimal integer encodings.
+This may cause the package to reject some invalid but formerly accepted ASN.1 data.
 
-[encoding/json](/pkg/encoding/json/)
+#### [encoding/json](/pkg/encoding/json/)
 
-:   The
-    [`Encoder`](/pkg/encoding/json/#Encoder)'s new
-    [`SetIndent`](/pkg/encoding/json/#Encoder.SetIndent) method
-    sets the indentation parameters for JSON encoding,
-    like in the top-level
-    [`Indent`](/pkg/encoding/json/#Indent) function.
+The
+[`Encoder`](/pkg/encoding/json/#Encoder)'s new
+[`SetIndent`](/pkg/encoding/json/#Encoder.SetIndent) method
+sets the indentation parameters for JSON encoding,
+like in the top-level
+[`Indent`](/pkg/encoding/json/#Indent) function.
 
-    The
-    [`Encoder`](/pkg/encoding/json/#Encoder)'s new
-    [`SetEscapeHTML`](/pkg/encoding/json/#Encoder.SetEscapeHTML) method
-    controls whether the
-    `&`, `<`, and `>`
-    characters in quoted strings should be escaped as
-    `\u0026`, `\u003c`, and `\u003e`,
-    respectively.
-    As in previous releases, the encoder defaults to applying this escaping,
-    to avoid certain problems that can arise when embedding JSON in HTML.
+The
+[`Encoder`](/pkg/encoding/json/#Encoder)'s new
+[`SetEscapeHTML`](/pkg/encoding/json/#Encoder.SetEscapeHTML) method
+controls whether the
+`&`, `<`, and `>`
+characters in quoted strings should be escaped as
+`\u0026`, `\u003c`, and `\u003e`,
+respectively.
+As in previous releases, the encoder defaults to applying this escaping,
+to avoid certain problems that can arise when embedding JSON in HTML.
 
-    In earlier versions of Go, this package only supported encoding and decoding
-    maps using keys with string types.
-    Go 1.7 adds support for maps using keys with integer types:
-    the encoding uses a quoted decimal representation as the JSON key.
-    Go 1.7 also adds support for encoding maps using non-string keys that implement
-    the `MarshalText`
-    (see
-    [`encoding.TextMarshaler`](/pkg/encoding/#TextMarshaler))
-    method,
-    as well as support for decoding maps using non-string keys that implement
-    the `UnmarshalText`
-    (see
-    [`encoding.TextUnmarshaler`](/pkg/encoding/#TextUnmarshaler))
-    method.
-    These methods are ignored for keys with string types in order to preserve
-    the encoding and decoding used in earlier versions of Go.
+In earlier versions of Go, this package only supported encoding and decoding
+maps using keys with string types.
+Go 1.7 adds support for maps using keys with integer types:
+the encoding uses a quoted decimal representation as the JSON key.
+Go 1.7 also adds support for encoding maps using non-string keys that implement
+the `MarshalText`
+(see
+[`encoding.TextMarshaler`](/pkg/encoding/#TextMarshaler))
+method,
+as well as support for decoding maps using non-string keys that implement
+the `UnmarshalText`
+(see
+[`encoding.TextUnmarshaler`](/pkg/encoding/#TextUnmarshaler))
+method.
+These methods are ignored for keys with string types in order to preserve
+the encoding and decoding used in earlier versions of Go.
 
-    When encoding a slice of typed bytes,
-    [`Marshal`](/pkg/encoding/json/#Marshal)
-    now generates an array of elements encoded using
-    that byte type's
-    `MarshalJSON`
-    or
-    `MarshalText`
-    method if present,
-    only falling back to the default base64-encoded string data if neither method is available.
-    Earlier versions of Go accept both the original base64-encoded string encoding
-    and the array encoding (assuming the byte type also implements
-    `UnmarshalJSON`
-    or
-    `UnmarshalText`
-    as appropriate),
-    so this change should be semantically backwards compatible with earlier versions of Go,
-    even though it does change the chosen encoding.
+When encoding a slice of typed bytes,
+[`Marshal`](/pkg/encoding/json/#Marshal)
+now generates an array of elements encoded using
+that byte type's
+`MarshalJSON`
+or
+`MarshalText`
+method if present,
+only falling back to the default base64-encoded string data if neither method is available.
+Earlier versions of Go accept both the original base64-encoded string encoding
+and the array encoding (assuming the byte type also implements
+`UnmarshalJSON`
+or
+`UnmarshalText`
+as appropriate),
+so this change should be semantically backwards compatible with earlier versions of Go,
+even though it does change the chosen encoding.
 
-[go/build](/pkg/go/build/)
+#### [go/build](/pkg/go/build/)
 
-:   To implement the go command's new support for binary-only packages
-    and for Fortran code in cgo-based packages,
-    the
-    [`Package`](/pkg/go/build/#Package) type
-    adds new fields `BinaryOnly`, `CgoFFLAGS`, and `FFiles`.
+To implement the go command's new support for binary-only packages
+and for Fortran code in cgo-based packages,
+the
+[`Package`](/pkg/go/build/#Package) type
+adds new fields `BinaryOnly`, `CgoFFLAGS`, and `FFiles`.
 
-[go/doc](/pkg/go/doc/)
+#### [go/doc](/pkg/go/doc/)
 
-:   To support the corresponding change in `go` `test` described above,
-    [`Example`](/pkg/go/doc/#Example) struct adds an Unordered field
-    indicating whether the example may generate its output lines in any order.
+To support the corresponding change in `go` `test` described above,
+[`Example`](/pkg/go/doc/#Example) struct adds an Unordered field
+indicating whether the example may generate its output lines in any order.
 
-[io](/pkg/io/)
+#### [io](/pkg/io/)
 
-:   The package adds new constants
-    `SeekStart`, `SeekCurrent`, and `SeekEnd`,
-    for use with
-    [`Seeker`](/pkg/io/#Seeker)
-    implementations.
-    These constants are preferred over `os.SEEK_SET`, `os.SEEK_CUR`, and `os.SEEK_END`,
-    but the latter will be preserved for compatibility.
+The package adds new constants
+`SeekStart`, `SeekCurrent`, and `SeekEnd`,
+for use with
+[`Seeker`](/pkg/io/#Seeker)
+implementations.
+These constants are preferred over `os.SEEK_SET`, `os.SEEK_CUR`, and `os.SEEK_END`,
+but the latter will be preserved for compatibility.
 
-[math/big](/pkg/math/big/)
+#### [math/big](/pkg/math/big/)
 
-:   The
-    [`Float`](/pkg/math/big/#Float) type adds
-    [`GobEncode`](/pkg/math/big/#Float.GobEncode) and
-    [`GobDecode`](/pkg/math/big/#Float.GobDecode) methods,
-    so that values of type `Float` can now be encoded and decoded using the
-    [`encoding/gob`](/pkg/encoding/gob/)
-    package.
+The
+[`Float`](/pkg/math/big/#Float) type adds
+[`GobEncode`](/pkg/math/big/#Float.GobEncode) and
+[`GobDecode`](/pkg/math/big/#Float.GobDecode) methods,
+so that values of type `Float` can now be encoded and decoded using the
+[`encoding/gob`](/pkg/encoding/gob/)
+package.
 
-[math/rand](/pkg/math/rand/)
+#### [math/rand](/pkg/math/rand/)
 
-:   The
-    [`Read`](/pkg/math/rand/#Read) function and
-    [`Rand`](/pkg/math/rand/#Rand)'s
-    [`Read`](/pkg/math/rand/#Rand.Read) method
-    now produce a pseudo-random stream of bytes that is consistent and not
-    dependent on the size of the input buffer.
+The
+[`Read`](/pkg/math/rand/#Read) function and
+[`Rand`](/pkg/math/rand/#Rand)'s
+[`Read`](/pkg/math/rand/#Rand.Read) method
+now produce a pseudo-random stream of bytes that is consistent and not
+dependent on the size of the input buffer.
 
-    The documentation clarifies that
-    Rand's [`Seed`](/pkg/math/rand/#Rand.Seed)
-    and [`Read`](/pkg/math/rand/#Rand.Read) methods
-    are not safe to call concurrently, though the global
-    functions [`Seed`](/pkg/math/rand/#Seed)
-    and [`Read`](/pkg/math/rand/#Read) are (and have
-    always been) safe.
+The documentation clarifies that
+Rand's [`Seed`](/pkg/math/rand/#Rand.Seed)
+and [`Read`](/pkg/math/rand/#Rand.Read) methods
+are not safe to call concurrently, though the global
+functions [`Seed`](/pkg/math/rand/#Seed)
+and [`Read`](/pkg/math/rand/#Read) are (and have
+always been) safe.
 
-[mime/multipart](/pkg/mime/multipart/)
+#### [mime/multipart](/pkg/mime/multipart/)
 
-:   The
-    [`Writer`](/pkg/mime/multipart/#Writer)
-    implementation now emits each multipart section's header sorted by key.
-    Previously, iteration over a map caused the section header to use a
-    non-deterministic order.
+The
+[`Writer`](/pkg/mime/multipart/#Writer)
+implementation now emits each multipart section's header sorted by key.
+Previously, iteration over a map caused the section header to use a
+non-deterministic order.
 
-[net](/pkg/net/)
+#### [net](/pkg/net/)
 
-:   As part of the introduction of [context](#context), the
-    [`Dialer`](/pkg/net/#Dialer) type has a new method
-    [`DialContext`](/pkg/net/#Dialer.DialContext), like
-    [`Dial`](/pkg/net/#Dialer.Dial) but adding the
-    [`context.Context`](/pkg/context/#Context)
-    for the dial operation.
-    The context is intended to obsolete the `Dialer`'s
-    `Cancel` and `Deadline` fields,
-    but the implementation continues to respect them,
-    for backwards compatibility.
+As part of the introduction of [context](#context), the
+[`Dialer`](/pkg/net/#Dialer) type has a new method
+[`DialContext`](/pkg/net/#Dialer.DialContext), like
+[`Dial`](/pkg/net/#Dialer.Dial) but adding the
+[`context.Context`](/pkg/context/#Context)
+for the dial operation.
+The context is intended to obsolete the `Dialer`'s
+`Cancel` and `Deadline` fields,
+but the implementation continues to respect them,
+for backwards compatibility.
 
-    The
-    [`IP`](/pkg/net/#IP) type's
-    [`String`](/pkg/net/#IP.String) method has changed its result for invalid `IP` addresses.
-    In past releases, if an `IP` byte slice had length other than 0, 4, or 16, `String`
-    returned `"?"`.
-    Go 1.7 adds the hexadecimal encoding of the bytes, as in `"?12ab"`.
+The
+[`IP`](/pkg/net/#IP) type's
+[`String`](/pkg/net/#IP.String) method has changed its result for invalid `IP` addresses.
+In past releases, if an `IP` byte slice had length other than 0, 4, or 16, `String`
+returned `"?"`.
+Go 1.7 adds the hexadecimal encoding of the bytes, as in `"?12ab"`.
 
-    The pure Go [name resolution](/pkg/net/#hdr-Name_Resolution)
-    implementation now respects `nsswitch.conf`'s
-    stated preference for the priority of DNS lookups compared to
-    local file (that is, `/etc/hosts`) lookups.
+The pure Go [name resolution](/pkg/net/#hdr-Name_Resolution)
+implementation now respects `nsswitch.conf`'s
+stated preference for the priority of DNS lookups compared to
+local file (that is, `/etc/hosts`) lookups.
 
-[net/http](/pkg/net/http/)
+#### [net/http](/pkg/net/http/)
 
-:   [`ResponseWriter`](/pkg/net/http/#ResponseWriter)'s
-    documentation now makes clear that beginning to write the response
-    may prevent future reads on the request body.
-    For maximal compatibility, implementations are encouraged to
-    read the request body completely before writing any part of the response.
+[`ResponseWriter`](/pkg/net/http/#ResponseWriter)'s
+documentation now makes clear that beginning to write the response
+may prevent future reads on the request body.
+For maximal compatibility, implementations are encouraged to
+read the request body completely before writing any part of the response.
 
-    As part of the introduction of [context](#context), the
-    [`Request`](/pkg/net/http/#Request) has a new methods
-    [`Context`](/pkg/net/http/#Request.Context), to retrieve the associated context, and
-    [`WithContext`](/pkg/net/http/#Request.WithContext), to construct a copy of `Request`
-    with a modified context.
+As part of the introduction of [context](#context), the
+[`Request`](/pkg/net/http/#Request) has a new methods
+[`Context`](/pkg/net/http/#Request.Context), to retrieve the associated context, and
+[`WithContext`](/pkg/net/http/#Request.WithContext), to construct a copy of `Request`
+with a modified context.
 
-    In the
-    [`Server`](/pkg/net/http/#Server) implementation,
-    [`Serve`](/pkg/net/http/#Server.Serve) records in the request context
-    both the underlying `*Server` using the key `ServerContextKey`
-    and the local address on which the request was received (a
-    [`Addr`](/pkg/net/#Addr)) using the key `LocalAddrContextKey`.
-    For example, the address on which a request received is
-    `req.Context().Value(http.LocalAddrContextKey).(net.Addr)`.
+In the
+[`Server`](/pkg/net/http/#Server) implementation,
+[`Serve`](/pkg/net/http/#Server.Serve) records in the request context
+both the underlying `*Server` using the key `ServerContextKey`
+and the local address on which the request was received (a
+[`Addr`](/pkg/net/#Addr)) using the key `LocalAddrContextKey`.
+For example, the address on which a request received is
+`req.Context().Value(http.LocalAddrContextKey).(net.Addr)`.
 
-    The server's [`Serve`](/pkg/net/http/#Server.Serve) method
-    now only enables HTTP/2 support if the `Server.TLSConfig` field is `nil`
-    or includes `"h2"` in its `TLSConfig.NextProtos`.
+The server's [`Serve`](/pkg/net/http/#Server.Serve) method
+now only enables HTTP/2 support if the `Server.TLSConfig` field is `nil`
+or includes `"h2"` in its `TLSConfig.NextProtos`.
 
-    The server implementation now
-    pads response codes less than 100 to three digits
-    as required by the protocol,
-    so that `w.WriteHeader(5)` uses the HTTP response
-    status `005`, not just `5`.
+The server implementation now
+pads response codes less than 100 to three digits
+as required by the protocol,
+so that `w.WriteHeader(5)` uses the HTTP response
+status `005`, not just `5`.
 
-    The server implementation now correctly sends only one "Transfer-Encoding" header when "chunked"
-    is set explicitly, following [RFC 7230](https://tools.ietf.org/html/rfc7230#section-3.3.1).
+The server implementation now correctly sends only one "Transfer-Encoding" header when "chunked"
+is set explicitly, following [RFC 7230](https://tools.ietf.org/html/rfc7230#section-3.3.1).
 
-    The server implementation is now stricter about rejecting requests with invalid HTTP versions.
-    Invalid requests claiming to be HTTP/0.x are now rejected (HTTP/0.9 was never fully supported),
-    and plaintext HTTP/2 requests other than the "PRI \* HTTP/2.0" upgrade request are now rejected as well.
-    The server continues to handle encrypted HTTP/2 requests.
+The server implementation is now stricter about rejecting requests with invalid HTTP versions.
+Invalid requests claiming to be HTTP/0.x are now rejected (HTTP/0.9 was never fully supported),
+and plaintext HTTP/2 requests other than the "PRI \* HTTP/2.0" upgrade request are now rejected as well.
+The server continues to handle encrypted HTTP/2 requests.
 
-    In the server, a 200 status code is sent back by the timeout handler on an empty
-    response body, instead of sending back 0 as the status code.
+In the server, a 200 status code is sent back by the timeout handler on an empty
+response body, instead of sending back 0 as the status code.
 
-    In the client, the
-    [`Transport`](/pkg/net/http/#Transport) implementation passes the request context
-    to any dial operation connecting to the remote server.
-    If a custom dialer is needed, the new `Transport` field
-    `DialContext` is preferred over the existing `Dial` field,
-    to allow the transport to supply a context.
+In the client, the
+[`Transport`](/pkg/net/http/#Transport) implementation passes the request context
+to any dial operation connecting to the remote server.
+If a custom dialer is needed, the new `Transport` field
+`DialContext` is preferred over the existing `Dial` field,
+to allow the transport to supply a context.
 
-    The
-    [`Transport`](/pkg/net/http/#Transport) also adds fields
-    `IdleConnTimeout`,
-    `MaxIdleConns`,
-    and
-    `MaxResponseHeaderBytes`
-    to help control client resources consumed
-    by idle or chatty servers.
+The
+[`Transport`](/pkg/net/http/#Transport) also adds fields
+`IdleConnTimeout`,
+`MaxIdleConns`,
+and
+`MaxResponseHeaderBytes`
+to help control client resources consumed
+by idle or chatty servers.
 
-    A
-    [`Client`](/pkg/net/http/#Client)'s configured `CheckRedirect` function can now
-    return `ErrUseLastResponse` to indicate that the
-    most recent redirect response should be returned as the
-    result of the HTTP request.
-    That response is now available to the `CheckRedirect` function
-    as `req.Response`.
+A
+[`Client`](/pkg/net/http/#Client)'s configured `CheckRedirect` function can now
+return `ErrUseLastResponse` to indicate that the
+most recent redirect response should be returned as the
+result of the HTTP request.
+That response is now available to the `CheckRedirect` function
+as `req.Response`.
 
-    Since Go 1, the default behavior of the HTTP client is
-    to request server-side compression
-    using the `Accept-Encoding` request header
-    and then to decompress the response body transparently,
-    and this behavior is adjustable using the
-    [`Transport`](/pkg/net/http/#Transport)'s `DisableCompression` field.
-    In Go 1.7, to aid the implementation of HTTP proxies, the
-    [`Response`](/pkg/net/http/#Response)'s new
-    `Uncompressed` field reports whether
-    this transparent decompression took place.
+Since Go 1, the default behavior of the HTTP client is
+to request server-side compression
+using the `Accept-Encoding` request header
+and then to decompress the response body transparently,
+and this behavior is adjustable using the
+[`Transport`](/pkg/net/http/#Transport)'s `DisableCompression` field.
+In Go 1.7, to aid the implementation of HTTP proxies, the
+[`Response`](/pkg/net/http/#Response)'s new
+`Uncompressed` field reports whether
+this transparent decompression took place.
 
-    [`DetectContentType`](/pkg/net/http/#DetectContentType)
-    adds support for a few new audio and video content types.
+[`DetectContentType`](/pkg/net/http/#DetectContentType)
+adds support for a few new audio and video content types.
 
-[net/http/cgi](/pkg/net/http/cgi/)
+#### [net/http/cgi](/pkg/net/http/cgi/)
 
-:   The
-    [`Handler`](/pkg/net/http/cgi/#Handler)
-    adds a new field
-    `Stderr`
-    that allows redirection of the child process's
-    standard error away from the host process's
-    standard error.
+The
+[`Handler`](/pkg/net/http/cgi/#Handler)
+adds a new field
+`Stderr`
+that allows redirection of the child process's
+standard error away from the host process's
+standard error.
 
-[net/http/httptest](/pkg/net/http/httptest/)
+#### [net/http/httptest](/pkg/net/http/httptest/)
 
-:   The new function
-    [`NewRequest`](/pkg/net/http/httptest/#NewRequest)
-    prepares a new
-    [`http.Request`](/pkg/net/http/#Request)
-    suitable for passing to an
-    [`http.Handler`](/pkg/net/http/#Handler) during a test.
+The new function
+[`NewRequest`](/pkg/net/http/httptest/#NewRequest)
+prepares a new
+[`http.Request`](/pkg/net/http/#Request)
+suitable for passing to an
+[`http.Handler`](/pkg/net/http/#Handler) during a test.
 
-    The
-    [`ResponseRecorder`](/pkg/net/http/httptest/#ResponseRecorder)'s new
-    [`Result`](/pkg/net/http/httptest/#ResponseRecorder.Result) method
-    returns the recorded
-    [`http.Response`](/pkg/net/http/#Response).
-    Tests that need to check the response's headers or trailers
-    should call `Result` and inspect the response fields
-    instead of accessing
-    `ResponseRecorder`'s `HeaderMap` directly.
+The
+[`ResponseRecorder`](/pkg/net/http/httptest/#ResponseRecorder)'s new
+[`Result`](/pkg/net/http/httptest/#ResponseRecorder.Result) method
+returns the recorded
+[`http.Response`](/pkg/net/http/#Response).
+Tests that need to check the response's headers or trailers
+should call `Result` and inspect the response fields
+instead of accessing
+`ResponseRecorder`'s `HeaderMap` directly.
 
-[net/http/httputil](/pkg/net/http/httputil/)
+#### [net/http/httputil](/pkg/net/http/httputil/)
 
-:   The
-    [`ReverseProxy`](/pkg/net/http/httputil/#ReverseProxy) implementation now responds with “502 Bad Gateway”
-    when it cannot reach a back end; in earlier releases it responded with “500 Internal Server Error.”
+The
+[`ReverseProxy`](/pkg/net/http/httputil/#ReverseProxy) implementation now responds with “502 Bad Gateway”
+when it cannot reach a back end; in earlier releases it responded with “500 Internal Server Error.”
 
-    Both
-    [`ClientConn`](/pkg/net/http/httputil/#ClientConn) and
-    [`ServerConn`](/pkg/net/http/httputil/#ServerConn) have been documented as deprecated.
-    They are low-level, old, and unused by Go's current HTTP stack
-    and will no longer be updated.
-    Programs should use
-    [`http.Client`](/pkg/net/http/#Client),
-    [`http.Transport`](/pkg/net/http/#Transport),
-    and
-    [`http.Server`](/pkg/net/http/#Server)
-    instead.
+Both
+[`ClientConn`](/pkg/net/http/httputil/#ClientConn) and
+[`ServerConn`](/pkg/net/http/httputil/#ServerConn) have been documented as deprecated.
+They are low-level, old, and unused by Go's current HTTP stack
+and will no longer be updated.
+Programs should use
+[`http.Client`](/pkg/net/http/#Client),
+[`http.Transport`](/pkg/net/http/#Transport),
+and
+[`http.Server`](/pkg/net/http/#Server)
+instead.
 
-[net/http/pprof](/pkg/net/http/pprof/)
+#### [net/http/pprof](/pkg/net/http/pprof/)
 
-:   The runtime trace HTTP handler, installed to handle the path `/debug/pprof/trace`,
-    now accepts a fractional number in its `seconds` query parameter,
-    allowing collection of traces for intervals smaller than one second.
-    This is especially useful on busy servers.
+The runtime trace HTTP handler, installed to handle the path `/debug/pprof/trace`,
+now accepts a fractional number in its `seconds` query parameter,
+allowing collection of traces for intervals smaller than one second.
+This is especially useful on busy servers.
 
-[net/mail](/pkg/net/mail/)
+#### [net/mail](/pkg/net/mail/)
 
-:   The address parser now allows unescaped UTF-8 text in addresses
-    following [RFC 6532](https://tools.ietf.org/html/rfc6532),
-    but it does not apply any normalization to the result.
-    For compatibility with older mail parsers,
-    the address encoder, namely
-    [`Address`](/pkg/net/mail/#Address)'s
-    [`String`](/pkg/net/mail/#Address.String) method,
-    continues to escape all UTF-8 text following [RFC 5322](https://tools.ietf.org/html/rfc5322).
+The address parser now allows unescaped UTF-8 text in addresses
+following [RFC 6532](https://tools.ietf.org/html/rfc6532),
+but it does not apply any normalization to the result.
+For compatibility with older mail parsers,
+the address encoder, namely
+[`Address`](/pkg/net/mail/#Address)'s
+[`String`](/pkg/net/mail/#Address.String) method,
+continues to escape all UTF-8 text following [RFC 5322](https://tools.ietf.org/html/rfc5322).
 
-    The [`ParseAddress`](/pkg/net/mail/#ParseAddress)
-    function and
-    the [`AddressParser.Parse`](/pkg/net/mail/#AddressParser.Parse)
-    method are stricter.
-    They used to ignore any characters following an e-mail address, but
-    will now return an error for anything other than whitespace.
+The [`ParseAddress`](/pkg/net/mail/#ParseAddress)
+function and
+the [`AddressParser.Parse`](/pkg/net/mail/#AddressParser.Parse)
+method are stricter.
+They used to ignore any characters following an e-mail address, but
+will now return an error for anything other than whitespace.
 
-[net/url](/pkg/net/url/)
+#### [net/url](/pkg/net/url/)
 
-:   The
-    [`URL`](/pkg/net/url/#URL)'s
-    new `ForceQuery` field
-    records whether the URL must have a query string,
-    in order to distinguish URLs without query strings (like `/search`)
-    from URLs with empty query strings (like `/search?`).
+The
+[`URL`](/pkg/net/url/#URL)'s
+new `ForceQuery` field
+records whether the URL must have a query string,
+in order to distinguish URLs without query strings (like `/search`)
+from URLs with empty query strings (like `/search?`).
 
-[os](/pkg/os/)
+#### [os](/pkg/os/)
 
-:   [`IsExist`](/pkg/os/#IsExist) now returns true for `syscall.ENOTEMPTY`,
-    on systems where that error exists.
+[`IsExist`](/pkg/os/#IsExist) now returns true for `syscall.ENOTEMPTY`,
+on systems where that error exists.
 
-    On Windows,
-    [`Remove`](/pkg/os/#Remove) now removes read-only files when possible,
-    making the implementation behave as on
-    non-Windows systems.
+On Windows,
+[`Remove`](/pkg/os/#Remove) now removes read-only files when possible,
+making the implementation behave as on
+non-Windows systems.
 
-[os/exec](/pkg/os/exec/)
+#### [os/exec](/pkg/os/exec/)
 
-:   As part of the introduction of [context](#context),
-    the new constructor
-    [`CommandContext`](/pkg/os/exec/#CommandContext)
-    is like
-    [`Command`](/pkg/os/exec/#Command) but includes a context that can be used to cancel the command execution.
+As part of the introduction of [context](#context),
+the new constructor
+[`CommandContext`](/pkg/os/exec/#CommandContext)
+is like
+[`Command`](/pkg/os/exec/#Command) but includes a context that can be used to cancel the command execution.
 
-[os/user](/pkg/os/user/)
+#### [os/user](/pkg/os/user/)
 
-:   The
-    [`Current`](/pkg/os/user/#Current)
-    function is now implemented even when cgo is not available.
+The
+[`Current`](/pkg/os/user/#Current)
+function is now implemented even when cgo is not available.
 
-    The new
-    [`Group`](/pkg/os/user/#Group) type,
-    along with the lookup functions
-    [`LookupGroup`](/pkg/os/user/#LookupGroup) and
-    [`LookupGroupId`](/pkg/os/user/#LookupGroupId)
-    and the new field `GroupIds` in the `User` struct,
-    provides access to system-specific user group information.
+The new
+[`Group`](/pkg/os/user/#Group) type,
+along with the lookup functions
+[`LookupGroup`](/pkg/os/user/#LookupGroup) and
+[`LookupGroupId`](/pkg/os/user/#LookupGroupId)
+and the new field `GroupIds` in the `User` struct,
+provides access to system-specific user group information.
 
-[reflect](/pkg/reflect/)
+#### [reflect](/pkg/reflect/)
 
-:   Although
-    [`Value`](/pkg/reflect/#Value)'s
-    [`Field`](/pkg/reflect/#Value.Field) method has always been documented to panic
-    if the given field number `i` is out of range, it has instead
-    silently returned a zero
-    [`Value`](/pkg/reflect/#Value).
-    Go 1.7 changes the method to behave as documented.
+Although
+[`Value`](/pkg/reflect/#Value)'s
+[`Field`](/pkg/reflect/#Value.Field) method has always been documented to panic
+if the given field number `i` is out of range, it has instead
+silently returned a zero
+[`Value`](/pkg/reflect/#Value).
+Go 1.7 changes the method to behave as documented.
 
-    The new
-    [`StructOf`](/pkg/reflect/#StructOf)
-    function constructs a struct type at run time.
-    It completes the set of type constructors, joining
-    [`ArrayOf`](/pkg/reflect/#ArrayOf),
-    [`ChanOf`](/pkg/reflect/#ChanOf),
-    [`FuncOf`](/pkg/reflect/#FuncOf),
-    [`MapOf`](/pkg/reflect/#MapOf),
-    [`PtrTo`](/pkg/reflect/#PtrTo),
-    and
-    [`SliceOf`](/pkg/reflect/#SliceOf).
+The new
+[`StructOf`](/pkg/reflect/#StructOf)
+function constructs a struct type at run time.
+It completes the set of type constructors, joining
+[`ArrayOf`](/pkg/reflect/#ArrayOf),
+[`ChanOf`](/pkg/reflect/#ChanOf),
+[`FuncOf`](/pkg/reflect/#FuncOf),
+[`MapOf`](/pkg/reflect/#MapOf),
+[`PtrTo`](/pkg/reflect/#PtrTo),
+and
+[`SliceOf`](/pkg/reflect/#SliceOf).
 
-    [`StructTag`](/pkg/reflect/#StructTag)'s
-    new method
-    [`Lookup`](/pkg/reflect/#StructTag.Lookup)
-    is like
-    [`Get`](/pkg/reflect/#StructTag.Get)
-    but distinguishes the tag not containing the given key
-    from the tag associating an empty string with the given key.
+[`StructTag`](/pkg/reflect/#StructTag)'s
+new method
+[`Lookup`](/pkg/reflect/#StructTag.Lookup)
+is like
+[`Get`](/pkg/reflect/#StructTag.Get)
+but distinguishes the tag not containing the given key
+from the tag associating an empty string with the given key.
 
-    The
-    [`Method`](/pkg/reflect/#Type.Method) and
-    [`NumMethod`](/pkg/reflect/#Type.NumMethod)
-    methods of
-    [`Type`](/pkg/reflect/#Type) and
-    [`Value`](/pkg/reflect/#Value)
-    no longer return or count unexported methods.
+The
+[`Method`](/pkg/reflect/#Type.Method) and
+[`NumMethod`](/pkg/reflect/#Type.NumMethod)
+methods of
+[`Type`](/pkg/reflect/#Type) and
+[`Value`](/pkg/reflect/#Value)
+no longer return or count unexported methods.
 
-[strings](/pkg/strings/)
+#### [strings](/pkg/strings/)
 
-:   In previous releases of Go, if
-    [`Reader`](/pkg/strings/#Reader)'s
-    [`Read`](/pkg/strings/#Reader.Read) method
-    were asked for zero bytes with no data remaining, it would
-    return a count of 0 and no error.
-    Now it returns a count of 0 and the error
-    [`io.EOF`](/pkg/io/#EOF).
+In previous releases of Go, if
+[`Reader`](/pkg/strings/#Reader)'s
+[`Read`](/pkg/strings/#Reader.Read) method
+were asked for zero bytes with no data remaining, it would
+return a count of 0 and no error.
+Now it returns a count of 0 and the error
+[`io.EOF`](/pkg/io/#EOF).
 
-    The
-    [`Reader`](/pkg/strings/#Reader) type has a new method
-    [`Reset`](/pkg/strings/#Reader.Reset) to allow reuse of a `Reader`.
+The
+[`Reader`](/pkg/strings/#Reader) type has a new method
+[`Reset`](/pkg/strings/#Reader.Reset) to allow reuse of a `Reader`.
 
-[time](/pkg/time/)
+#### [time](/pkg/time/)
 
-:   [`Duration`](/pkg/time/#Duration)'s
-    time.Duration.String method now reports the zero duration as `"0s"`, not `"0"`.
-    [`ParseDuration`](/pkg/time/#ParseDuration) continues to accept both forms.
+[`Duration`](/pkg/time/#Duration)'s
+time.Duration.String method now reports the zero duration as `"0s"`, not `"0"`.
+[`ParseDuration`](/pkg/time/#ParseDuration) continues to accept both forms.
 
-    The method call `time.Local.String()` now returns `"Local"` on all systems;
-    in earlier releases, it returned an empty string on Windows.
+The method call `time.Local.String()` now returns `"Local"` on all systems;
+in earlier releases, it returned an empty string on Windows.
 
-    The time zone database in
-    `$GOROOT/lib/time` has been updated
-    to IANA release 2016d.
-    This fallback database is only used when the system time zone database
-    cannot be found, for example on Windows.
-    The Windows time zone abbreviation list has also been updated.
+The time zone database in
+`$GOROOT/lib/time` has been updated
+to IANA release 2016d.
+This fallback database is only used when the system time zone database
+cannot be found, for example on Windows.
+The Windows time zone abbreviation list has also been updated.
 
-[syscall](/pkg/syscall/)
+#### [syscall](/pkg/syscall/)
 
-:   On Linux, the
-    [`SysProcAttr`](/pkg/syscall/#SysProcAttr) struct
-    (as used in
-    [`os/exec.Cmd`](/pkg/os/exec/#Cmd)'s `SysProcAttr` field)
-    has a new `Unshareflags` field.
-    If the field is nonzero, the child process created by
-    [`ForkExec`](/pkg/syscall/#ForkExec)
-    (as used in `exec.Cmd`'s `Run` method)
-    will call the
-    [_unshare_(2)](https://man7.org/linux/man-pages/man2/unshare.2.html)
-    system call before executing the new program.
+On Linux, the
+[`SysProcAttr`](/pkg/syscall/#SysProcAttr) struct
+(as used in
+[`os/exec.Cmd`](/pkg/os/exec/#Cmd)'s `SysProcAttr` field)
+has a new `Unshareflags` field.
+If the field is nonzero, the child process created by
+[`ForkExec`](/pkg/syscall/#ForkExec)
+(as used in `exec.Cmd`'s `Run` method)
+will call the
+[_unshare_(2)](https://man7.org/linux/man-pages/man2/unshare.2.html)
+system call before executing the new program.
 
-[unicode](/pkg/unicode/)
+#### [unicode](/pkg/unicode/)
 
-:   The [`unicode`](/pkg/unicode/) package and associated
-    support throughout the system has been upgraded from version 8.0 to
-    [Unicode 9.0](https://www.unicode.org/versions/Unicode9.0.0/).
+The [`unicode`](/pkg/unicode/) package and associated
+support throughout the system has been upgraded from version 8.0 to
+[Unicode 9.0](https://www.unicode.org/versions/Unicode9.0.0/).
diff --git a/_content/doc/go1.8.md b/_content/doc/go1.8.md
index d064f7e..ccbeec5 100644
--- a/_content/doc/go1.8.md
+++ b/_content/doc/go1.8.md
@@ -550,768 +550,768 @@
 in mind. The following sections list the user visible changes and additions.
 Optimizations and minor bug fixes are not listed.
 
-[archive/tar](/pkg/archive/tar/)
+#### [archive/tar](/pkg/archive/tar/)
 
-:   <!-- CL 28471, CL 31440, CL 31441, CL 31444, CL 28418, CL 31439 -->
-    The tar implementation corrects many bugs in corner cases of the file format.
-    The [`Reader`](/pkg/archive/tar/#Reader)
-    is now able to process tar files in the PAX format with entries larger than 8GB.
-    The [`Writer`](/pkg/archive/tar/#Writer)
-    no longer produces invalid tar files in some situations involving long pathnames.
+<!-- CL 28471, CL 31440, CL 31441, CL 31444, CL 28418, CL 31439 -->
+The tar implementation corrects many bugs in corner cases of the file format.
+The [`Reader`](/pkg/archive/tar/#Reader)
+is now able to process tar files in the PAX format with entries larger than 8GB.
+The [`Writer`](/pkg/archive/tar/#Writer)
+no longer produces invalid tar files in some situations involving long pathnames.
 
-[compress/flate](/pkg/compress/flate/)
+#### [compress/flate](/pkg/compress/flate/)
 
-:   <!-- CL 31640, CL 31174, CL 32149 -->
-    There have been some minor fixes to the encoder to improve the
-    compression ratio in certain situations. As a result, the exact
-    encoded output of `DEFLATE` may be different from Go 1.7. Since
-    `DEFLATE` is the underlying compression of gzip, png, zlib, and zip,
-    those formats may have changed outputs.
+<!-- CL 31640, CL 31174, CL 32149 -->
+There have been some minor fixes to the encoder to improve the
+compression ratio in certain situations. As a result, the exact
+encoded output of `DEFLATE` may be different from Go 1.7. Since
+`DEFLATE` is the underlying compression of gzip, png, zlib, and zip,
+those formats may have changed outputs.
 
-    <!-- CL 31174 -->
-    The encoder, when operating in
-    [`NoCompression`](/pkg/compress/flate/#NoCompression)
-    mode, now produces a consistent output that is not dependent on
-    the size of the slices passed to the
-    [`Write`](/pkg/compress/flate/#Writer.Write)
-    method.
+<!-- CL 31174 -->
+The encoder, when operating in
+[`NoCompression`](/pkg/compress/flate/#NoCompression)
+mode, now produces a consistent output that is not dependent on
+the size of the slices passed to the
+[`Write`](/pkg/compress/flate/#Writer.Write)
+method.
 
-    <!-- CL 28216 -->
-    The decoder, upon encountering an error, now returns any
-    buffered data it had uncompressed along with the error.
+<!-- CL 28216 -->
+The decoder, upon encountering an error, now returns any
+buffered data it had uncompressed along with the error.
 
-[compress/gzip](/pkg/compress/gzip/)
+#### [compress/gzip](/pkg/compress/gzip/)
 
-:   The [`Writer`](/pkg/compress/gzip/#Writer)
-    now encodes a zero `MTIME` field when
-    the [`Header.ModTime`](/pkg/compress/gzip/#Header)
-    field is the zero value.
-    In previous releases of Go, the `Writer` would encode
-    a nonsensical value.
-    Similarly,
-    the [`Reader`](/pkg/compress/gzip/#Reader)
-    now reports a zero encoded `MTIME` field as a zero
-    `Header.ModTime`.
+The [`Writer`](/pkg/compress/gzip/#Writer)
+now encodes a zero `MTIME` field when
+the [`Header.ModTime`](/pkg/compress/gzip/#Header)
+field is the zero value.
+In previous releases of Go, the `Writer` would encode
+a nonsensical value.
+Similarly,
+the [`Reader`](/pkg/compress/gzip/#Reader)
+now reports a zero encoded `MTIME` field as a zero
+`Header.ModTime`.
 
-[context](/pkg/context/)
+#### [context](/pkg/context/)
 
-:   <!-- CL 30370 -->
-    The [`DeadlineExceeded`](/pkg/context#DeadlineExceeded)
-    error now implements
-    [`net.Error`](/pkg/net/#Error)
-    and reports true for both the `Timeout` and
-    `Temporary` methods.
+<!-- CL 30370 -->
+The [`DeadlineExceeded`](/pkg/context#DeadlineExceeded)
+error now implements
+[`net.Error`](/pkg/net/#Error)
+and reports true for both the `Timeout` and
+`Temporary` methods.
 
-[crypto/tls](/pkg/crypto/tls/)
+#### [crypto/tls](/pkg/crypto/tls/)
 
-:   <!-- CL 25159, CL 31318 -->
-    The new method
-    [`Conn.CloseWrite`](/pkg/crypto/tls/#Conn.CloseWrite)
-    allows TLS connections to be half closed.
+<!-- CL 25159, CL 31318 -->
+The new method
+[`Conn.CloseWrite`](/pkg/crypto/tls/#Conn.CloseWrite)
+allows TLS connections to be half closed.
 
-    <!-- CL 28075 -->
-    The new method
-    [`Config.Clone`](/pkg/crypto/tls/#Config.Clone)
-    clones a TLS configuration.
+<!-- CL 28075 -->
+The new method
+[`Config.Clone`](/pkg/crypto/tls/#Config.Clone)
+clones a TLS configuration.
 
-    <!-- CL 30790 -->
-    The new [`Config.GetConfigForClient`](/pkg/crypto/tls/#Config.GetConfigForClient)
-    callback allows selecting a configuration for a client dynamically, based
-    on the client's
-    [`ClientHelloInfo`](/pkg/crypto/tls/#ClientHelloInfo). <!-- CL 31391, CL 32119 -->
-    The [`ClientHelloInfo`](/pkg/crypto/tls/#ClientHelloInfo)
-    struct now has new
-    fields `Conn`, `SignatureSchemes` (using
-    the new
-    type [`SignatureScheme`](/kg/crypto/tls/#SignatureScheme)),
-    `SupportedProtos`, and `SupportedVersions`.
+<!-- CL 30790 -->
+The new [`Config.GetConfigForClient`](/pkg/crypto/tls/#Config.GetConfigForClient)
+callback allows selecting a configuration for a client dynamically, based
+on the client's
+[`ClientHelloInfo`](/pkg/crypto/tls/#ClientHelloInfo). <!-- CL 31391, CL 32119 -->
+The [`ClientHelloInfo`](/pkg/crypto/tls/#ClientHelloInfo)
+struct now has new
+fields `Conn`, `SignatureSchemes` (using
+the new
+type [`SignatureScheme`](/kg/crypto/tls/#SignatureScheme)),
+`SupportedProtos`, and `SupportedVersions`.
 
-    <!-- CL 32115 -->
-    The new [`Config.GetClientCertificate`](/pkg/crypto/tls/#Config.GetClientCertificate)
-    callback allows selecting a client certificate based on the server's
-    TLS `CertificateRequest` message, represented by the new
-    [`CertificateRequestInfo`](/pkg/crypto/tls/#CertificateRequestInfo).
+<!-- CL 32115 -->
+The new [`Config.GetClientCertificate`](/pkg/crypto/tls/#Config.GetClientCertificate)
+callback allows selecting a client certificate based on the server's
+TLS `CertificateRequest` message, represented by the new
+[`CertificateRequestInfo`](/pkg/crypto/tls/#CertificateRequestInfo).
 
-    <!-- CL 27434 -->
-    The new
-    [`Config.KeyLogWriter`](/pkg/crypto/tls/#Config.KeyLogWriter)
-    allows debugging TLS connections
-    in [WireShark](https://www.wireshark.org/) and
-    similar tools.
+<!-- CL 27434 -->
+The new
+[`Config.KeyLogWriter`](/pkg/crypto/tls/#Config.KeyLogWriter)
+allows debugging TLS connections
+in [WireShark](https://www.wireshark.org/) and
+similar tools.
 
-    <!-- CL 32115 -->
-    The new
-    [`Config.VerifyPeerCertificate`](/pkg/crypto/tls/#Config.VerifyPeerCertificate)
-    callback allows additional validation of a peer's presented certificate.
+<!-- CL 32115 -->
+The new
+[`Config.VerifyPeerCertificate`](/pkg/crypto/tls/#Config.VerifyPeerCertificate)
+callback allows additional validation of a peer's presented certificate.
 
-    <!-- CL 18130 -->
-    The `crypto/tls` package now implements basic
-    countermeasures against CBC padding oracles. There should be
-    no explicit secret-dependent timings, but it does not attempt to
-    normalize memory accesses to prevent cache timing leaks.
+<!-- CL 18130 -->
+The `crypto/tls` package now implements basic
+countermeasures against CBC padding oracles. There should be
+no explicit secret-dependent timings, but it does not attempt to
+normalize memory accesses to prevent cache timing leaks.
 
-    The `crypto/tls` package now supports
-    X25519 and <!-- CL 30824, CL 30825 -->
-    ChaCha20-Poly1305. <!-- CL 30957, CL 30958 -->
-    ChaCha20-Poly1305 is now prioritized unless <!-- CL 32871 -->
-    hardware support for AES-GCM is present.
+The `crypto/tls` package now supports
+X25519 and <!-- CL 30824, CL 30825 -->
+ChaCha20-Poly1305. <!-- CL 30957, CL 30958 -->
+ChaCha20-Poly1305 is now prioritized unless <!-- CL 32871 -->
+hardware support for AES-GCM is present.
 
-    <!-- CL 27315, CL 35290 -->
-    AES-128-CBC cipher suites with SHA-256 are also
-    now supported, but disabled by default.
+<!-- CL 27315, CL 35290 -->
+AES-128-CBC cipher suites with SHA-256 are also
+now supported, but disabled by default.
 
-[crypto/x509](/pkg/crypto/x509/)
+#### [crypto/x509](/pkg/crypto/x509/)
 
-:   <!-- CL 24743 -->
-    PSS signatures are now supported.
+<!-- CL 24743 -->
+PSS signatures are now supported.
 
-    <!-- CL 32644 -->
-    [`UnknownAuthorityError`](/pkg/crypto/x509/#UnknownAuthorityError)
-    now has a `Cert` field, reporting the untrusted
-    certificate.
+<!-- CL 32644 -->
+[`UnknownAuthorityError`](/pkg/crypto/x509/#UnknownAuthorityError)
+now has a `Cert` field, reporting the untrusted
+certificate.
 
-    Certificate validation is more permissive in a few cases and
-    stricter in a few other cases. <!--
-    crypto/x509: allow a leaf certificate to be specified directly as root (CL 27393)
-    crypto/x509: check that the issuer name matches the issuer's subject name (CL 23571)
-    crypto/x509: don't accept a root that already appears in a chain. (CL 32121)
-    crypto/x509: fix name constraints handling (CL 30155)
-    crypto/x509: parse all names in an RDN (CL 30810)
-    crypto/x509: recognise ISO OID for RSA+SHA1 (CL 27394)
-    crypto/x509: require a NULL parameters for RSA public keys (CL 16166, CL 27312)
-    crypto/x509: return error for missing SerialNumber (CL 27238)
-    -->
+Certificate validation is more permissive in a few cases and
+stricter in a few other cases. <!--
+crypto/x509: allow a leaf certificate to be specified directly as root (CL 27393)
+crypto/x509: check that the issuer name matches the issuer's subject name (CL 23571)
+crypto/x509: don't accept a root that already appears in a chain. (CL 32121)
+crypto/x509: fix name constraints handling (CL 30155)
+crypto/x509: parse all names in an RDN (CL 30810)
+crypto/x509: recognise ISO OID for RSA+SHA1 (CL 27394)
+crypto/x509: require a NULL parameters for RSA public keys (CL 16166, CL 27312)
+crypto/x509: return error for missing SerialNumber (CL 27238)
+-->
 
-    <!-- CL 30375 -->
-    Root certificates will now also be looked for
-    at `/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem`
-    on Linux, to support RHEL and CentOS.
+<!-- CL 30375 -->
+Root certificates will now also be looked for
+at `/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem`
+on Linux, to support RHEL and CentOS.
 
-[database/sql](/pkg/database/sql/)
+#### [database/sql](/pkg/database/sql/)
 
-:   The package now supports `context.Context`. There are new methods
-    ending in `Context` such as
-    [`DB.QueryContext`](/pkg/database/sql/#DB.QueryContext) and
-    [`DB.PrepareContext`](/pkg/database/sql/#DB.PrepareContext)
-    that take context arguments. Using the new `Context` methods ensures that
-    connections are closed and returned to the connection pool when the
-    request is done; enables canceling in-progress queries
-    should the driver support that; and allows the database
-    pool to cancel waiting for the next available connection.
+The package now supports `context.Context`. There are new methods
+ending in `Context` such as
+[`DB.QueryContext`](/pkg/database/sql/#DB.QueryContext) and
+[`DB.PrepareContext`](/pkg/database/sql/#DB.PrepareContext)
+that take context arguments. Using the new `Context` methods ensures that
+connections are closed and returned to the connection pool when the
+request is done; enables canceling in-progress queries
+should the driver support that; and allows the database
+pool to cancel waiting for the next available connection.
 
-    The [`IsolationLevel`](/pkg/database/sql#IsolationLevel)
-    can now be set when starting a transaction by setting the isolation level
-    on [`TxOptions.Isolation`](/pkg/database/sql#TxOptions.Isolation) and passing
-    it to [`DB.BeginTx`](/pkg/database/sql#DB.BeginTx).
-    An error will be returned if an isolation level is selected that the driver
-    does not support. A read-only attribute may also be set on the transaction
-    by setting [`TxOptions.ReadOnly`](/pkg/database/sql/#TxOptions.ReadOnly)
-    to true.
+The [`IsolationLevel`](/pkg/database/sql#IsolationLevel)
+can now be set when starting a transaction by setting the isolation level
+on [`TxOptions.Isolation`](/pkg/database/sql#TxOptions.Isolation) and passing
+it to [`DB.BeginTx`](/pkg/database/sql#DB.BeginTx).
+An error will be returned if an isolation level is selected that the driver
+does not support. A read-only attribute may also be set on the transaction
+by setting [`TxOptions.ReadOnly`](/pkg/database/sql/#TxOptions.ReadOnly)
+to true.
 
-    Queries now expose the SQL column type information for drivers that support it.
-    Rows can return [`ColumnTypes`](/pkg/database/sql#Rows.ColumnTypes)
-    which can include SQL type information, column type lengths, and the Go type.
+Queries now expose the SQL column type information for drivers that support it.
+Rows can return [`ColumnTypes`](/pkg/database/sql#Rows.ColumnTypes)
+which can include SQL type information, column type lengths, and the Go type.
 
-    A [`Rows`](/pkg/database/sql/#Rows)
-    can now represent multiple result sets. After
-    [`Rows.Next`](/pkg/database/sql/#Rows.Next) returns false,
-    [`Rows.NextResultSet`](/pkg/database/sql/#Rows.NextResultSet)
-    may be called to advance to the next result set. The existing `Rows`
-    should continue to be used after it advances to the next result set.
+A [`Rows`](/pkg/database/sql/#Rows)
+can now represent multiple result sets. After
+[`Rows.Next`](/pkg/database/sql/#Rows.Next) returns false,
+[`Rows.NextResultSet`](/pkg/database/sql/#Rows.NextResultSet)
+may be called to advance to the next result set. The existing `Rows`
+should continue to be used after it advances to the next result set.
 
-    [`NamedArg`](/pkg/database/sql/#NamedArg) may be used
-    as query arguments. The new function [`Named`](/pkg/database/sql/#Named)
-    helps create a [`NamedArg`](/pkg/database/sql/#NamedArg)
-    more succinctly.
+[`NamedArg`](/pkg/database/sql/#NamedArg) may be used
+as query arguments. The new function [`Named`](/pkg/database/sql/#Named)
+helps create a [`NamedArg`](/pkg/database/sql/#NamedArg)
+more succinctly.
 
-    If a driver supports the new
-    [`Pinger`](/pkg/database/sql/driver/#Pinger)
-    interface, the
-    [`DB.Ping`](/pkg/database/sql/#DB.Ping)
+If a driver supports the new
+[`Pinger`](/pkg/database/sql/driver/#Pinger)
+interface, the
+[`DB.Ping`](/pkg/database/sql/#DB.Ping)
+and
+[`DB.PingContext`](/pkg/database/sql/#DB.PingContext)
+methods will use that interface to check whether a
+database connection is still valid.
+
+The new `Context` query methods work for all drivers, but
+`Context` cancellation is not responsive unless the driver has been
+updated to use them. The other features require driver support in
+[`database/sql/driver`](/pkg/database/sql/driver).
+Driver authors should review the new interfaces. Users of existing
+driver should review the driver documentation to see what
+it supports and any system specific documentation on each feature.
+
+#### [debug/pe](/pkg/debug/pe/)
+
+<!-- CL 22720, CL 27212, CL 22181, CL 22332, CL 22336, Issue 15345 -->
+The package has been extended and is now used by
+[the Go linker](/cmd/link/) to read `gcc`-generated object files.
+The new
+[`File.StringTable`](/pkg/debug/pe/#File.StringTable)
+and
+[`Section.Relocs`](/pkg/debug/pe/#Section.Relocs)
+fields provide access to the COFF string table and COFF relocations.
+The new
+[`File.COFFSymbols`](/pkg/debug/pe/#File.COFFSymbols)
+allows low-level access to the COFF symbol table.
+
+#### [encoding/base64](/pkg/encoding/base64/)
+
+<!-- CL 24964 -->
+The new
+[`Encoding.Strict`](/pkg/encoding/base64/#Encoding.Strict)
+method returns an `Encoding` that causes the decoder
+to return an error when the trailing padding bits are not zero.
+
+#### [encoding/binary](/pkg/encoding/binary/)
+
+<!-- CL 28514 -->
+[`Read`](/pkg/encoding/binary/#Read)
+and
+[`Write`](/pkg/encoding/binary/#Write)
+now support booleans.
+
+#### [encoding/json](/pkg/encoding/json/)
+
+<!-- CL 18692  -->
+[`UnmarshalTypeError`](/pkg/encoding/json/#UnmarshalTypeError)
+now includes the struct and field name.
+
+<!-- CL 31932 -->
+A nil [`Marshaler`](/pkg/encoding/json/#Marshaler)
+now marshals as a JSON `null` value.
+
+<!-- CL 21811 -->
+A [`RawMessage`](/pkg/encoding/json/#RawMessage) value now
+marshals the same as its pointer type.
+
+<!-- CL 30371 -->
+[`Marshal`](/pkg/encoding/json/#Marshal)
+encodes floating-point numbers using the same format as in ES6,
+preferring decimal (not exponential) notation for a wider range of values.
+In particular, all floating-point integers up to 2<sup>64</sup> format the
+same as the equivalent `int64` representation.
+
+<!-- CL 30944 -->
+In previous versions of Go, unmarshaling a JSON `null` into an
+[`Unmarshaler`](/pkg/encoding/json/#Unmarshaler)
+was considered a no-op; now the `Unmarshaler`'s
+`UnmarshalJSON` method is called with the JSON literal
+`null` and can define the semantics of that case.
+
+#### [encoding/pem](/pkg/encoding/pem/)
+
+<!-- CL 27391 -->
+[`Decode`](/pkg/encoding/pem/#Decode)
+is now strict about the format of the ending line.
+
+#### [encoding/xml](/pkg/encoding/xml/)
+
+<!-- CL 30946 -->
+[`Unmarshal`](/pkg/encoding/xml/#Unmarshal)
+now has wildcard support for collecting all attributes using
+the new `",any,attr"` struct tag.
+
+#### [expvar](/pkg/expvar/)
+
+<!-- CL 30917 -->
+The new methods
+[`Int.Value`](/pkg/expvar/#Int.Value),
+[`String.Value`](/pkg/expvar/#String.Value),
+[`Float.Value`](/pkg/expvar/#Float.Value), and
+[`Func.Value`](/pkg/expvar/#Func.Value)
+report the current value of an exported variable.
+
+<!-- CL 24722 -->
+The new
+function [`Handler`](/pkg/expvar/#Handler)
+returns the package's HTTP handler, to enable installing it in
+non-standard locations.
+
+#### [fmt](/pkg/fmt/)
+
+<!-- CL 30611 -->
+[`Scanf`](/pkg/fmt/#Scanf),
+[`Fscanf`](/pkg/fmt/#Fscanf), and
+[`Sscanf`](/pkg/fmt/#Sscanf) now
+handle spaces differently and more consistently than
+previous releases. See the
+[scanning documentation](/pkg/fmt/#hdr-Scanning)
+for details.
+
+#### [go/doc](/pkg/go/doc/)
+
+<!-- CL 29870 -->
+The new [`IsPredeclared`](/pkg/go/doc/#IsPredeclared)
+function reports whether a string is a predeclared identifier.
+
+#### [go/types](/pkg/go/types/)
+
+<!-- CL 30715 -->
+The new function
+[`Default`](/pkg/go/types/#Default)
+returns the default "typed" type for an "untyped" type.
+
+<!-- CL 31939 -->
+The alignment of `complex64` now matches
+the [Go compiler](/cmd/compile/).
+
+#### [html/template](/pkg/html/template/)
+
+<!-- CL 14336 -->
+The package now validates
+the `"type"` attribute on
+a `<script>` tag.
+
+#### [image/png](/pkg/image/png/)
+
+<!-- CL 32143, CL 32140 -->
+[`Decode`](/pkg/image/png/#Decode)
+(and `DecodeConfig`)
+now supports True Color and grayscale transparency.
+
+<!-- CL 29872 -->
+[`Encoder`](/pkg/image/png/#Encoder)
+is now faster and creates smaller output
+when encoding paletted images.
+
+#### [math/big](/pkg/math/big/)
+
+<!-- CL 30706 -->
+The new method
+[`Int.Sqrt`](/pkg/math/big/#Int.Sqrt)
+calculates ⌊√x⌋.
+
+The new method
+[`Float.Scan`](/pkg/math/big/#Float.Scan)
+is a support routine for
+[`fmt.Scanner`](/pkg/fmt/#Scanner).
+
+[`Int.ModInverse`](/pkg/math/big/#Int.ModInverse)
+now supports negative numbers.
+
+#### [math/rand](/pkg/math/rand/)
+
+<!-- CL 27253, CL 33456 -->
+The new [`Rand.Uint64`](/pkg/math/rand/#Rand.Uint64)
+method returns `uint64` values. The
+new [`Source64`](/pkg/math/rand/#Source64)
+interface describes sources capable of generating such values
+directly; otherwise the `Rand.Uint64` method
+constructs a `uint64` from two calls
+to [`Source`](/pkg/math/rand/#Source)'s
+`Int63` method.
+
+#### [mime](/pkg/mime/)
+
+<!-- CL 32175 -->
+[`ParseMediaType`](/pkg/mime/#ParseMediaType)
+now preserves unnecessary backslash escapes as literals,
+in order to support MSIE.
+When MSIE sends a full file path (in “intranet mode”), it does not
+escape backslashes: “`C:\dev\go\foo.txt`”, not
+“`C:\\dev\\go\\foo.txt`”.
+If we see an unnecessary backslash escape, we now assume it is from MSIE
+and intended as a literal backslash.
+No known MIME generators emit unnecessary backslash escapes
+for simple token characters like numbers and letters.
+
+#### [mime/quotedprintable](/pkg/mime/quotedprintable/)
+
+The
+[`Reader`](/pkg/mime/quotedprintable/#Reader)'s
+parsing has been relaxed in two ways to accept
+more input seen in the wild. <!-- CL 32174 -->
+First, it accepts an equals sign (`=`) not followed
+by two hex digits as a literal equal sign. <!-- CL 27530 -->
+Second, it silently ignores a trailing equals sign at the end of
+an encoded input.
+
+#### [net](/pkg/net/)
+
+<!-- CL 30164, CL 33473 -->
+The [`Conn`](/pkg/net/#Conn) documentation
+has been updated to clarify expectations of an interface
+implementation. Updates in the `net/http` packages
+depend on implementations obeying the documentation.
+
+_Updating:_ implementations of the `Conn` interface should verify
+they implement the documented semantics. The
+[golang.org/x/net/nettest](https://godoc.org/golang.org/x/net/nettest)
+package will exercise a `Conn` and validate it behaves properly.
+
+<!-- CL 32099 -->
+The new method
+[`UnixListener.SetUnlinkOnClose`](/pkg/net/#UnixListener.SetUnlinkOnClose)
+sets whether the underlying socket file should be removed from the file system when
+the listener is closed.
+
+<!-- CL 29951 -->
+The new [`Buffers`](/pkg/net/#Buffers) type permits
+writing to the network more efficiently from multiple discontiguous buffers
+in memory. On certain machines, for certain types of connections,
+this is optimized into an OS-specific batch write operation (such as `writev`).
+
+<!-- CL 29440 -->
+The new [`Resolver`](/pkg/net/#Resolver) looks up names and numbers
+and supports [`context.Context`](/pkg/context/#Context).
+The [`Dialer`](/pkg/net/#Dialer) now has an optional
+[`Resolver` field](/pkg/net/#Dialer.Resolver).
+
+<!-- CL 29892 -->
+[`Interfaces`](/pkg/net/#Interfaces) is now supported on Solaris.
+
+<!-- CL 29233, CL 24901 -->
+The Go DNS resolver now supports `resolv.conf`'s “`rotate`”
+and “`option` `ndots:0`” options. The “`ndots`” option is
+now respected in the same way as `libresolve`.
+
+#### [net/http](/pkg/net/http/)
+
+Server changes:
+
+  - The server now supports graceful shutdown support, [mentioned above](#http_shutdown).
+  - <!-- CL 32024 -->
+    The [`Server`](/pkg/net/http/#Server)
+    adds configuration options
+    `ReadHeaderTimeout` and `IdleTimeout`
+    and documents `WriteTimeout`.
+  - <!-- CL 32014 -->
+    [`FileServer`](/pkg/net/http/#FileServer)
     and
-    [`DB.PingContext`](/pkg/database/sql/#DB.PingContext)
-    methods will use that interface to check whether a
-    database connection is still valid.
+    [`ServeContent`](/pkg/net/http/#ServeContent)
+    now support HTTP `If-Match` conditional requests,
+    in addition to the previous `If-None-Match`
+    support for ETags properly formatted according to RFC 7232, section 2.3.
 
-    The new `Context` query methods work for all drivers, but
-    `Context` cancellation is not responsive unless the driver has been
-    updated to use them. The other features require driver support in
-    [`database/sql/driver`](/pkg/database/sql/driver).
-    Driver authors should review the new interfaces. Users of existing
-    driver should review the driver documentation to see what
-    it supports and any system specific documentation on each feature.
+There are several additions to what a server's `Handler` can do:
 
-[debug/pe](/pkg/debug/pe/)
+  - <!-- CL 31173 -->
+    The [`Context`](/pkg/context/#Context)
+    returned
+    by [`Request.Context`](/pkg/net/http/#Request.Context)
+    is canceled if the underlying `net.Conn`
+    closes. For instance, if the user closes their browser in the
+    middle of a slow request, the `Handler` can now
+    detect that the user is gone. This complements the
+    existing [`CloseNotifier`](/pkg/net/http/#CloseNotifier)
+    support. This functionality requires that the underlying
+    [`net.Conn`](/pkg/net/#Conn) implements
+    [recently clarified interface documentation](#net).
+  - <!-- CL 32479 -->
+    To serve trailers produced after the header has already been written,
+    see the new
+    [`TrailerPrefix`](/pkg/net/http/#TrailerPrefix)
+    mechanism.
+  - <!-- CL 33099 -->
+    A `Handler` can now abort a response by panicking
+    with the error
+    [`ErrAbortHandler`](/pkg/net/http/#ErrAbortHandler).
+  - <!-- CL 30812 -->
+    A `Write` of zero bytes to a
+    [`ResponseWriter`](/pkg/net/http/#ResponseWriter)
+    is now defined as a
+    way to test whether a `ResponseWriter` has been hijacked:
+    if so, the `Write` returns
+    [`ErrHijacked`](/pkg/net/http/#ErrHijacked)
+    without printing an error
+    to the server's error log.
 
-:   <!-- CL 22720, CL 27212, CL 22181, CL 22332, CL 22336, Issue 15345 -->
-    The package has been extended and is now used by
-    [the Go linker](/cmd/link/) to read `gcc`-generated object files.
-    The new
-    [`File.StringTable`](/pkg/debug/pe/#File.StringTable)
-    and
-    [`Section.Relocs`](/pkg/debug/pe/#Section.Relocs)
-    fields provide access to the COFF string table and COFF relocations.
-    The new
-    [`File.COFFSymbols`](/pkg/debug/pe/#File.COFFSymbols)
-    allows low-level access to the COFF symbol table.
+Client & Transport changes:
 
-[encoding/base64](/pkg/encoding/base64/)
-
-:   <!-- CL 24964 -->
-    The new
-    [`Encoding.Strict`](/pkg/encoding/base64/#Encoding.Strict)
-    method returns an `Encoding` that causes the decoder
-    to return an error when the trailing padding bits are not zero.
-
-[encoding/binary](/pkg/encoding/binary/)
-
-:   <!-- CL 28514 -->
-    [`Read`](/pkg/encoding/binary/#Read)
-    and
-    [`Write`](/pkg/encoding/binary/#Write)
-    now support booleans.
-
-[encoding/json](/pkg/encoding/json/)
-
-:   <!-- CL 18692  -->
-    [`UnmarshalTypeError`](/pkg/encoding/json/#UnmarshalTypeError)
-    now includes the struct and field name.
-
-    <!-- CL 31932 -->
-    A nil [`Marshaler`](/pkg/encoding/json/#Marshaler)
-    now marshals as a JSON `null` value.
-
-    <!-- CL 21811 -->
-    A [`RawMessage`](/pkg/encoding/json/#RawMessage) value now
-    marshals the same as its pointer type.
-
-    <!-- CL 30371 -->
-    [`Marshal`](/pkg/encoding/json/#Marshal)
-    encodes floating-point numbers using the same format as in ES6,
-    preferring decimal (not exponential) notation for a wider range of values.
-    In particular, all floating-point integers up to 2<sup>64</sup> format the
-    same as the equivalent `int64` representation.
-
-    <!-- CL 30944 -->
-    In previous versions of Go, unmarshaling a JSON `null` into an
-    [`Unmarshaler`](/pkg/encoding/json/#Unmarshaler)
-    was considered a no-op; now the `Unmarshaler`'s
-    `UnmarshalJSON` method is called with the JSON literal
-    `null` and can define the semantics of that case.
-
-[encoding/pem](/pkg/encoding/pem/)
-
-:   <!-- CL 27391 -->
-    [`Decode`](/pkg/encoding/pem/#Decode)
-    is now strict about the format of the ending line.
-
-[encoding/xml](/pkg/encoding/xml/)
-
-:   <!-- CL 30946 -->
-    [`Unmarshal`](/pkg/encoding/xml/#Unmarshal)
-    now has wildcard support for collecting all attributes using
-    the new `",any,attr"` struct tag.
-
-[expvar](/pkg/expvar/)
-
-:   <!-- CL 30917 -->
-    The new methods
-    [`Int.Value`](/pkg/expvar/#Int.Value),
-    [`String.Value`](/pkg/expvar/#String.Value),
-    [`Float.Value`](/pkg/expvar/#Float.Value), and
-    [`Func.Value`](/pkg/expvar/#Func.Value)
-    report the current value of an exported variable.
-
-    <!-- CL 24722 -->
-    The new
-    function [`Handler`](/pkg/expvar/#Handler)
-    returns the package's HTTP handler, to enable installing it in
-    non-standard locations.
-
-[fmt](/pkg/fmt/)
-
-:   <!-- CL 30611 -->
-    [`Scanf`](/pkg/fmt/#Scanf),
-    [`Fscanf`](/pkg/fmt/#Fscanf), and
-    [`Sscanf`](/pkg/fmt/#Sscanf) now
-    handle spaces differently and more consistently than
-    previous releases. See the
-    [scanning documentation](/pkg/fmt/#hdr-Scanning)
-    for details.
-
-[go/doc](/pkg/go/doc/)
-
-:   <!-- CL 29870 -->
-    The new [`IsPredeclared`](/pkg/go/doc/#IsPredeclared)
-    function reports whether a string is a predeclared identifier.
-
-[go/types](/pkg/go/types/)
-
-:   <!-- CL 30715 -->
-    The new function
-    [`Default`](/pkg/go/types/#Default)
-    returns the default "typed" type for an "untyped" type.
-
-    <!-- CL 31939 -->
-    The alignment of `complex64` now matches
-    the [Go compiler](/cmd/compile/).
-
-[html/template](/pkg/html/template/)
-
-:   <!-- CL 14336 -->
-    The package now validates
-    the `"type"` attribute on
-    a `<script>` tag.
-
-[image/png](/pkg/image/png/)
-
-:   <!-- CL 32143, CL 32140 -->
-    [`Decode`](/pkg/image/png/#Decode)
-    (and `DecodeConfig`)
-    now supports True Color and grayscale transparency.
-
-    <!-- CL 29872 -->
-    [`Encoder`](/pkg/image/png/#Encoder)
-    is now faster and creates smaller output
-    when encoding paletted images.
-
-[math/big](/pkg/math/big/)
-
-:   <!-- CL 30706 -->
-    The new method
-    [`Int.Sqrt`](/pkg/math/big/#Int.Sqrt)
-    calculates ⌊√x⌋.
-
-    The new method
-    [`Float.Scan`](/pkg/math/big/#Float.Scan)
-    is a support routine for
-    [`fmt.Scanner`](/pkg/fmt/#Scanner).
-
-    [`Int.ModInverse`](/pkg/math/big/#Int.ModInverse)
-    now supports negative numbers.
-
-[math/rand](/pkg/math/rand/)
-
-:   <!-- CL 27253, CL 33456 -->
-    The new [`Rand.Uint64`](/pkg/math/rand/#Rand.Uint64)
-    method returns `uint64` values. The
-    new [`Source64`](/pkg/math/rand/#Source64)
-    interface describes sources capable of generating such values
-    directly; otherwise the `Rand.Uint64` method
-    constructs a `uint64` from two calls
-    to [`Source`](/pkg/math/rand/#Source)'s
-    `Int63` method.
-
-[mime](/pkg/mime/)
-
-:   <!-- CL 32175 -->
-    [`ParseMediaType`](/pkg/mime/#ParseMediaType)
-    now preserves unnecessary backslash escapes as literals,
-    in order to support MSIE.
-    When MSIE sends a full file path (in “intranet mode”), it does not
-    escape backslashes: “`C:\dev\go\foo.txt`”, not
-    “`C:\\dev\\go\\foo.txt`”.
-    If we see an unnecessary backslash escape, we now assume it is from MSIE
-    and intended as a literal backslash.
-    No known MIME generators emit unnecessary backslash escapes
-    for simple token characters like numbers and letters.
-
-[mime/quotedprintable](/pkg/mime/quotedprintable/)
-
-:   The
-    [`Reader`](/pkg/mime/quotedprintable/#Reader)'s
-    parsing has been relaxed in two ways to accept
-    more input seen in the wild. <!-- CL 32174 -->
-    First, it accepts an equals sign (`=`) not followed
-    by two hex digits as a literal equal sign. <!-- CL 27530 -->
-    Second, it silently ignores a trailing equals sign at the end of
-    an encoded input.
-
-[net](/pkg/net/)
-
-:   <!-- CL 30164, CL 33473 -->
-    The [`Conn`](/pkg/net/#Conn) documentation
-    has been updated to clarify expectations of an interface
-    implementation. Updates in the `net/http` packages
-    depend on implementations obeying the documentation.
-
-    _Updating:_ implementations of the `Conn` interface should verify
-    they implement the documented semantics. The
-    [golang.org/x/net/nettest](https://godoc.org/golang.org/x/net/nettest)
-    package will exercise a `Conn` and validate it behaves properly.
-
-    <!-- CL 32099 -->
-    The new method
-    [`UnixListener.SetUnlinkOnClose`](/pkg/net/#UnixListener.SetUnlinkOnClose)
-    sets whether the underlying socket file should be removed from the file system when
-    the listener is closed.
-
-    <!-- CL 29951 -->
-    The new [`Buffers`](/pkg/net/#Buffers) type permits
-    writing to the network more efficiently from multiple discontiguous buffers
-    in memory. On certain machines, for certain types of connections,
-    this is optimized into an OS-specific batch write operation (such as `writev`).
-
-    <!-- CL 29440 -->
-    The new [`Resolver`](/pkg/net/#Resolver) looks up names and numbers
-    and supports [`context.Context`](/pkg/context/#Context).
-    The [`Dialer`](/pkg/net/#Dialer) now has an optional
-    [`Resolver` field](/pkg/net/#Dialer.Resolver).
-
-    <!-- CL 29892 -->
-    [`Interfaces`](/pkg/net/#Interfaces) is now supported on Solaris.
-
-    <!-- CL 29233, CL 24901 -->
-    The Go DNS resolver now supports `resolv.conf`'s “`rotate`”
-    and “`option` `ndots:0`” options. The “`ndots`” option is
-    now respected in the same way as `libresolve`.
-
-[net/http](/pkg/net/http/)
-
-:   Server changes:
-
-      - The server now supports graceful shutdown support, [mentioned above](#http_shutdown).
-      - <!-- CL 32024 -->
-        The [`Server`](/pkg/net/http/#Server)
-        adds configuration options
-        `ReadHeaderTimeout` and `IdleTimeout`
-        and documents `WriteTimeout`.
-      - <!-- CL 32014 -->
-        [`FileServer`](/pkg/net/http/#FileServer)
-        and
-        [`ServeContent`](/pkg/net/http/#ServeContent)
-        now support HTTP `If-Match` conditional requests,
-        in addition to the previous `If-None-Match`
-        support for ETags properly formatted according to RFC 7232, section 2.3.
-
-    There are several additions to what a server's `Handler` can do:
-
-      - <!-- CL 31173 -->
-        The [`Context`](/pkg/context/#Context)
-        returned
-        by [`Request.Context`](/pkg/net/http/#Request.Context)
-        is canceled if the underlying `net.Conn`
-        closes. For instance, if the user closes their browser in the
-        middle of a slow request, the `Handler` can now
-        detect that the user is gone. This complements the
-        existing [`CloseNotifier`](/pkg/net/http/#CloseNotifier)
-        support. This functionality requires that the underlying
-        [`net.Conn`](/pkg/net/#Conn) implements
-        [recently clarified interface documentation](#net).
-      - <!-- CL 32479 -->
-        To serve trailers produced after the header has already been written,
-        see the new
-        [`TrailerPrefix`](/pkg/net/http/#TrailerPrefix)
-        mechanism.
-      - <!-- CL 33099 -->
-        A `Handler` can now abort a response by panicking
-        with the error
-        [`ErrAbortHandler`](/pkg/net/http/#ErrAbortHandler).
-      - <!-- CL 30812 -->
-        A `Write` of zero bytes to a
-        [`ResponseWriter`](/pkg/net/http/#ResponseWriter)
-        is now defined as a
-        way to test whether a `ResponseWriter` has been hijacked:
-        if so, the `Write` returns
-        [`ErrHijacked`](/pkg/net/http/#ErrHijacked)
-        without printing an error
-        to the server's error log.
-
-    Client & Transport changes:
-
-      - <!-- CL 28930, CL 31435 -->
-        The [`Client`](/pkg/net/http/#Client)
-        now copies most request headers on redirect. See
-        [the documentation](/pkg/net/http/#Client)
-        on the `Client` type for details.
-      - <!-- CL 29072 -->
-        The [`Transport`](/pkg/net/http/#Transport)
-        now supports international domain names. Consequently, so do
-        [Get](/pkg/net/http/#Get) and other helpers.
-      - <!-- CL 31733, CL 29852 -->
-        The `Client` now supports 301, 307, and 308 redirects.
-        For example, `Client.Post` now follows 301
-        redirects, converting them to `GET` requests
-        without bodies, like it did for 302 and 303 redirect responses
-        previously.
-        The `Client` now also follows 307 and 308
-        redirects, preserving the original request method and body, if
-        any. If the redirect requires resending the request body, the
-        request must have the new
-        [`Request.GetBody`](/pkg/net/http/#Request)
-        field defined.
-        [`NewRequest`](/pkg/net/http/#NewRequest)
-        sets `Request.GetBody` automatically for common
-        body types.
-      - <!-- CL 32482 -->
-        The `Transport` now rejects requests for URLs with
-        ports containing non-digit characters.
-      - <!-- CL 27117 -->
-        The `Transport` will now retry non-idempotent
-        requests if no bytes were written before a network failure
-        and the request has no body.
-      - <!-- CL 32481 -->
-        The
-        new [`Transport.ProxyConnectHeader`](/pkg/net/http/#Transport)
-        allows configuration of header values to send to a proxy
-        during a `CONNECT` request.
-      - <!-- CL 28077 -->
-        The [`DefaultTransport.Dialer`](/pkg/net/http/#DefaultTransport)
-        now enables `DualStack` ("[Happy Eyeballs](https://tools.ietf.org/html/rfc6555)") support,
-        allowing the use of IPv4 as a backup if it looks like IPv6 might be
-        failing.
-      - <!-- CL 31726 -->
-        The [`Transport`](/pkg/net/http/#Transport)
-        no longer reads a byte of a non-nil
-        [`Request.Body`](/pkg/net/http/#Request.Body)
-        when the
-        [`Request.ContentLength`](/pkg/net/http/#Request.ContentLength)
-        is zero to determine whether the `ContentLength`
-        is actually zero or just undefined.
-        To explicitly signal that a body has zero length,
-        either set it to `nil`, or set it to the new value
-        [`NoBody`](/pkg/net/http/#NoBody).
-        The new `NoBody` value is intended for use by `Request`
-        constructor functions; it is used by
-        [`NewRequest`](/pkg/net/http/#NewRequest).
-
-[net/http/httptrace](/pkg/net/http/httptrace/)
-
-:   <!-- CL 30359 -->
-    There is now support for tracing a client request's TLS handshakes with
-    the new
-    [`ClientTrace.TLSHandshakeStart`](/pkg/net/http/httptrace/#ClientTrace.TLSHandshakeStart)
-    and
-    [`ClientTrace.TLSHandshakeDone`](/pkg/net/http/httptrace/#ClientTrace.TLSHandshakeDone).
-
-[net/http/httputil](/pkg/net/http/httputil/)
-
-:   <!-- CL 32356 -->
-    The [`ReverseProxy`](/pkg/net/http/httputil/#ReverseProxy)
-    has a new optional hook,
-    [`ModifyResponse`](/pkg/net/http/httputil/#ReverseProxy.ModifyResponse),
-    for modifying the response from the back end before proxying it to the client.
-
-[net/mail](/pkg/net/mail/)
-
-:   <!-- CL 32176 -->
-    Empty quoted strings are once again allowed in the name part of
-    an address. That is, Go 1.4 and earlier accepted
-    `""` `<gopher@example.com>`,
-    but Go 1.5 introduced a bug that rejected this address.
-    The address is recognized again.
-
-    <!-- CL 31581 -->
+  - <!-- CL 28930, CL 31435 -->
+    The [`Client`](/pkg/net/http/#Client)
+    now copies most request headers on redirect. See
+    [the documentation](/pkg/net/http/#Client)
+    on the `Client` type for details.
+  - <!-- CL 29072 -->
+    The [`Transport`](/pkg/net/http/#Transport)
+    now supports international domain names. Consequently, so do
+    [Get](/pkg/net/http/#Get) and other helpers.
+  - <!-- CL 31733, CL 29852 -->
+    The `Client` now supports 301, 307, and 308 redirects.
+    For example, `Client.Post` now follows 301
+    redirects, converting them to `GET` requests
+    without bodies, like it did for 302 and 303 redirect responses
+    previously.
+    The `Client` now also follows 307 and 308
+    redirects, preserving the original request method and body, if
+    any. If the redirect requires resending the request body, the
+    request must have the new
+    [`Request.GetBody`](/pkg/net/http/#Request)
+    field defined.
+    [`NewRequest`](/pkg/net/http/#NewRequest)
+    sets `Request.GetBody` automatically for common
+    body types.
+  - <!-- CL 32482 -->
+    The `Transport` now rejects requests for URLs with
+    ports containing non-digit characters.
+  - <!-- CL 27117 -->
+    The `Transport` will now retry non-idempotent
+    requests if no bytes were written before a network failure
+    and the request has no body.
+  - <!-- CL 32481 -->
     The
-    [`Header.Date`](/pkg/net/mail/#Header.Date)
-    method has always provided a way to parse
-    the `Date:` header.
-    A new function
-    [`ParseDate`](/pkg/net/mail/#ParseDate)
-    allows parsing dates found in other
-    header lines, such as the `Resent-Date:` header.
+    new [`Transport.ProxyConnectHeader`](/pkg/net/http/#Transport)
+    allows configuration of header values to send to a proxy
+    during a `CONNECT` request.
+  - <!-- CL 28077 -->
+    The [`DefaultTransport.Dialer`](/pkg/net/http/#DefaultTransport)
+    now enables `DualStack` ("[Happy Eyeballs](https://tools.ietf.org/html/rfc6555)") support,
+    allowing the use of IPv4 as a backup if it looks like IPv6 might be
+    failing.
+  - <!-- CL 31726 -->
+    The [`Transport`](/pkg/net/http/#Transport)
+    no longer reads a byte of a non-nil
+    [`Request.Body`](/pkg/net/http/#Request.Body)
+    when the
+    [`Request.ContentLength`](/pkg/net/http/#Request.ContentLength)
+    is zero to determine whether the `ContentLength`
+    is actually zero or just undefined.
+    To explicitly signal that a body has zero length,
+    either set it to `nil`, or set it to the new value
+    [`NoBody`](/pkg/net/http/#NoBody).
+    The new `NoBody` value is intended for use by `Request`
+    constructor functions; it is used by
+    [`NewRequest`](/pkg/net/http/#NewRequest).
 
-[net/smtp](/pkg/net/smtp/)
+#### [net/http/httptrace](/pkg/net/http/httptrace/)
 
-:   <!-- CL 33143 -->
-    If an implementation of the
-    [`Auth.Start`](/pkg/net/smtp/#Auth)
-    method returns an empty `toServer` value,
-    the package no longer sends
-    trailing whitespace in the SMTP `AUTH` command,
-    which some servers rejected.
+<!-- CL 30359 -->
+There is now support for tracing a client request's TLS handshakes with
+the new
+[`ClientTrace.TLSHandshakeStart`](/pkg/net/http/httptrace/#ClientTrace.TLSHandshakeStart)
+and
+[`ClientTrace.TLSHandshakeDone`](/pkg/net/http/httptrace/#ClientTrace.TLSHandshakeDone).
 
-[net/url](/pkg/net/url/)
+#### [net/http/httputil](/pkg/net/http/httputil/)
 
-:   <!-- CL 31322 -->
-    The new functions
-    [`PathEscape`](/pkg/net/url/#PathEscape)
-    and
-    [`PathUnescape`](/pkg/net/url/#PathUnescape)
-    are similar to the query escaping and unescaping functions but
-    for path elements.
+<!-- CL 32356 -->
+The [`ReverseProxy`](/pkg/net/http/httputil/#ReverseProxy)
+has a new optional hook,
+[`ModifyResponse`](/pkg/net/http/httputil/#ReverseProxy.ModifyResponse),
+for modifying the response from the back end before proxying it to the client.
 
-    <!-- CL 28933 -->
-    The new methods
-    [`URL.Hostname`](/pkg/net/url/#URL.Hostname)
-    and
-    [`URL.Port`](/pkg/net/url/#URL.Port)
-    return the hostname and port fields of a URL,
-    correctly handling the case where the port may not be present.
+#### [net/mail](/pkg/net/mail/)
 
-    <!-- CL 28343 -->
-    The existing method
-    [`URL.ResolveReference`](/pkg/net/url/#URL.ResolveReference)
-    now properly handles paths with escaped bytes without losing
-    the escaping.
+<!-- CL 32176 -->
+Empty quoted strings are once again allowed in the name part of
+an address. That is, Go 1.4 and earlier accepted
+`""` `<gopher@example.com>`,
+but Go 1.5 introduced a bug that rejected this address.
+The address is recognized again.
 
-    <!-- CL 31467 -->
-    The `URL` type now implements
-    [`encoding.BinaryMarshaler`](/pkg/encoding/#BinaryMarshaler) and
-    [`encoding.BinaryUnmarshaler`](/pkg/encoding/#BinaryUnmarshaler),
-    making it possible to process URLs in [gob data](/pkg/encoding/gob/).
+<!-- CL 31581 -->
+The
+[`Header.Date`](/pkg/net/mail/#Header.Date)
+method has always provided a way to parse
+the `Date:` header.
+A new function
+[`ParseDate`](/pkg/net/mail/#ParseDate)
+allows parsing dates found in other
+header lines, such as the `Resent-Date:` header.
 
-    <!-- CL 29610, CL 31582 -->
-    Following RFC 3986,
-    [`Parse`](/pkg/net/url/#Parse)
-    now rejects URLs like `this_that:other/thing` instead of
-    interpreting them as relative paths (`this_that` is not a valid scheme).
-    To force interpretation as a relative path,
-    such URLs should be prefixed with “`./`”.
-    The `URL.String` method now inserts this prefix as needed.
+#### [net/smtp](/pkg/net/smtp/)
 
-[os](/pkg/os/)
+<!-- CL 33143 -->
+If an implementation of the
+[`Auth.Start`](/pkg/net/smtp/#Auth)
+method returns an empty `toServer` value,
+the package no longer sends
+trailing whitespace in the SMTP `AUTH` command,
+which some servers rejected.
 
-:   <!-- CL 16551 -->
-    The new function
-    [`Executable`](/pkg/os/#Executable) returns
-    the path name of the running executable.
+#### [net/url](/pkg/net/url/)
 
-    <!-- CL 30614 -->
-    An attempt to call a method on
-    an [`os.File`](/pkg/os/#File) that has
-    already been closed will now return the new error
-    value [`os.ErrClosed`](/pkg/os/#ErrClosed).
-    Previously it returned a system-specific error such
-    as `syscall.EBADF`.
+<!-- CL 31322 -->
+The new functions
+[`PathEscape`](/pkg/net/url/#PathEscape)
+and
+[`PathUnescape`](/pkg/net/url/#PathUnescape)
+are similar to the query escaping and unescaping functions but
+for path elements.
 
-    <!-- CL 31358 -->
-    On Unix systems, [`os.Rename`](/pkg/os/#Rename)
-    will now return an error when used to rename a directory to an
-    existing empty directory.
-    Previously it would fail when renaming to a non-empty directory
-    but succeed when renaming to an empty directory.
-    This makes the behavior on Unix correspond to that of other systems.
+<!-- CL 28933 -->
+The new methods
+[`URL.Hostname`](/pkg/net/url/#URL.Hostname)
+and
+[`URL.Port`](/pkg/net/url/#URL.Port)
+return the hostname and port fields of a URL,
+correctly handling the case where the port may not be present.
 
-    <!-- CL 32451 -->
-    On Windows, long absolute paths are now transparently converted to
-    extended-length paths (paths that start with “`\\?\`”).
-    This permits the package to work with files whose path names are
-    longer than 260 characters.
+<!-- CL 28343 -->
+The existing method
+[`URL.ResolveReference`](/pkg/net/url/#URL.ResolveReference)
+now properly handles paths with escaped bytes without losing
+the escaping.
 
-    <!-- CL 29753 -->
-    On Windows, [`os.IsExist`](/pkg/os/#IsExist)
-    will now return `true` for the system
-    error `ERROR_DIR_NOT_EMPTY`.
-    This roughly corresponds to the existing handling of the Unix
-    error `ENOTEMPTY`.
+<!-- CL 31467 -->
+The `URL` type now implements
+[`encoding.BinaryMarshaler`](/pkg/encoding/#BinaryMarshaler) and
+[`encoding.BinaryUnmarshaler`](/pkg/encoding/#BinaryUnmarshaler),
+making it possible to process URLs in [gob data](/pkg/encoding/gob/).
 
-    <!-- CL 32152 -->
-    On Plan 9, files that are not served by `#M` will now
-    have [`ModeDevice`](/pkg/os/#ModeDevice) set in
-    the value returned
-    by [`FileInfo.Mode`](/pkg/os/#FileInfo).
+<!-- CL 29610, CL 31582 -->
+Following RFC 3986,
+[`Parse`](/pkg/net/url/#Parse)
+now rejects URLs like `this_that:other/thing` instead of
+interpreting them as relative paths (`this_that` is not a valid scheme).
+To force interpretation as a relative path,
+such URLs should be prefixed with “`./`”.
+The `URL.String` method now inserts this prefix as needed.
 
-[path/filepath](/pkg/path/filepath/)
+#### [os](/pkg/os/)
 
-:   A number of bugs and corner cases on Windows were fixed:
-    [`Abs`](/pkg/path/filepath/#Abs) now calls `Clean` as documented,
-    [`Glob`](/pkg/path/filepath/#Glob) now matches
-    “`\\?\c:\*`”,
-    [`EvalSymlinks`](/pkg/path/filepath/#EvalSymlinks) now
-    correctly handles “`C:.`”, and
-    [`Clean`](/pkg/path/filepath/#Clean) now properly
-    handles a leading “`..`” in the path.
+<!-- CL 16551 -->
+The new function
+[`Executable`](/pkg/os/#Executable) returns
+the path name of the running executable.
 
-[reflect](/pkg/reflect/)
+<!-- CL 30614 -->
+An attempt to call a method on
+an [`os.File`](/pkg/os/#File) that has
+already been closed will now return the new error
+value [`os.ErrClosed`](/pkg/os/#ErrClosed).
+Previously it returned a system-specific error such
+as `syscall.EBADF`.
 
-:   <!-- CL 30088 -->
-    The new function
-    [`Swapper`](/pkg/reflect/#Swapper) was
-    added to support [`sort.Slice`](#sortslice).
+<!-- CL 31358 -->
+On Unix systems, [`os.Rename`](/pkg/os/#Rename)
+will now return an error when used to rename a directory to an
+existing empty directory.
+Previously it would fail when renaming to a non-empty directory
+but succeed when renaming to an empty directory.
+This makes the behavior on Unix correspond to that of other systems.
 
-[strconv](/pkg/strconv/)
+<!-- CL 32451 -->
+On Windows, long absolute paths are now transparently converted to
+extended-length paths (paths that start with “`\\?\`”).
+This permits the package to work with files whose path names are
+longer than 260 characters.
 
-:   <!-- CL 31210 -->
-    The [`Unquote`](/pkg/strconv/#Unquote)
-    function now strips carriage returns (`\r`) in
-    backquoted raw strings, following the
-    [Go language semantics](/ref/spec#String_literals).
+<!-- CL 29753 -->
+On Windows, [`os.IsExist`](/pkg/os/#IsExist)
+will now return `true` for the system
+error `ERROR_DIR_NOT_EMPTY`.
+This roughly corresponds to the existing handling of the Unix
+error `ENOTEMPTY`.
 
-[syscall](/pkg/syscall/)
+<!-- CL 32152 -->
+On Plan 9, files that are not served by `#M` will now
+have [`ModeDevice`](/pkg/os/#ModeDevice) set in
+the value returned
+by [`FileInfo.Mode`](/pkg/os/#FileInfo).
 
-:   <!-- CL 25050, CL 25022 -->
-    The [`Getpagesize`](/pkg/syscall/#Getpagesize)
-    now returns the system's size, rather than a constant value.
-    Previously it always returned 4KB.
+#### [path/filepath](/pkg/path/filepath/)
 
-    <!-- CL 31446 -->
-    The signature
-    of [`Utimes`](/pkg/syscall/#Utimes) has
-    changed on Solaris to match all the other Unix systems'
-    signature. Portable code should continue to use
-    [`os.Chtimes`](/pkg/os/#Chtimes) instead.
+A number of bugs and corner cases on Windows were fixed:
+[`Abs`](/pkg/path/filepath/#Abs) now calls `Clean` as documented,
+[`Glob`](/pkg/path/filepath/#Glob) now matches
+“`\\?\c:\*`”,
+[`EvalSymlinks`](/pkg/path/filepath/#EvalSymlinks) now
+correctly handles “`C:.`”, and
+[`Clean`](/pkg/path/filepath/#Clean) now properly
+handles a leading “`..`” in the path.
 
-    <!-- CL 32319 -->
-    The `X__cmsg_data` field has been removed from
-    [`Cmsghdr`](/pkg/syscall/#Cmsghdr).
+#### [reflect](/pkg/reflect/)
 
-[text/template](/pkg/text/template/)
+<!-- CL 30088 -->
+The new function
+[`Swapper`](/pkg/reflect/#Swapper) was
+added to support [`sort.Slice`](#sortslice).
 
-:   <!-- CL 31462 -->
-    [`Template.Execute`](/pkg/text/template/#Template.Execute)
-    can now take a
-    [`reflect.Value`](/pkg/reflect/#Value) as its data
-    argument, and
-    [`FuncMap`](/pkg/text/template/#FuncMap)
-    functions can also accept and return `reflect.Value`.
+#### [strconv](/pkg/strconv/)
 
-[time](/pkg/time/)
+<!-- CL 31210 -->
+The [`Unquote`](/pkg/strconv/#Unquote)
+function now strips carriage returns (`\r`) in
+backquoted raw strings, following the
+[Go language semantics](/ref/spec#String_literals).
 
-:   <!-- CL 20118 -->
-    The new function
-    [`Until`](/pkg/time/#Until) complements
-    the analogous `Since` function.
+#### [syscall](/pkg/syscall/)
 
-    <!-- CL 29338 -->
-    [`ParseDuration`](/pkg/time/#ParseDuration)
-    now accepts long fractional parts.
+<!-- CL 25050, CL 25022 -->
+The [`Getpagesize`](/pkg/syscall/#Getpagesize)
+now returns the system's size, rather than a constant value.
+Previously it always returned 4KB.
 
-    <!-- CL 33429 -->
-    [`Parse`](/pkg/time/#Parse)
-    now rejects dates before the start of a month, such as June 0;
-    it already rejected dates beyond the end of the month, such as
-    June 31 and July 32.
+<!-- CL 31446 -->
+The signature
+of [`Utimes`](/pkg/syscall/#Utimes) has
+changed on Solaris to match all the other Unix systems'
+signature. Portable code should continue to use
+[`os.Chtimes`](/pkg/os/#Chtimes) instead.
 
-    <!-- CL 33029 -->
-    <!-- CL 34816 -->
-    The `tzdata` database has been updated to version
-    2016j for systems that don't already have a local time zone
-    database.
+<!-- CL 32319 -->
+The `X__cmsg_data` field has been removed from
+[`Cmsghdr`](/pkg/syscall/#Cmsghdr).
+
+#### [text/template](/pkg/text/template/)
+
+<!-- CL 31462 -->
+[`Template.Execute`](/pkg/text/template/#Template.Execute)
+can now take a
+[`reflect.Value`](/pkg/reflect/#Value) as its data
+argument, and
+[`FuncMap`](/pkg/text/template/#FuncMap)
+functions can also accept and return `reflect.Value`.
+
+#### [time](/pkg/time/)
+
+<!-- CL 20118 -->
+The new function
+[`Until`](/pkg/time/#Until) complements
+the analogous `Since` function.
+
+<!-- CL 29338 -->
+[`ParseDuration`](/pkg/time/#ParseDuration)
+now accepts long fractional parts.
+
+<!-- CL 33429 -->
+[`Parse`](/pkg/time/#Parse)
+now rejects dates before the start of a month, such as June 0;
+it already rejected dates beyond the end of the month, such as
+June 31 and July 32.
+
+<!-- CL 33029 -->
+<!-- CL 34816 -->
+The `tzdata` database has been updated to version
+2016j for systems that don't already have a local time zone
+database.
 
 
-[testing](/pkg/testing/)
+#### [testing](/pkg/testing/)
 
-:   <!-- CL 29970 -->
-    The new method
-    [`T.Name`](/pkg/testing/#T.Name)
-    (and `B.Name`) returns the name of the current
-    test or benchmark.
+<!-- CL 29970 -->
+The new method
+[`T.Name`](/pkg/testing/#T.Name)
+(and `B.Name`) returns the name of the current
+test or benchmark.
 
-    <!-- CL 32483 -->
-    The new function
-    [`CoverMode`](/pkg/testing/#CoverMode)
-    reports the test coverage mode.
+<!-- CL 32483 -->
+The new function
+[`CoverMode`](/pkg/testing/#CoverMode)
+reports the test coverage mode.
 
-    <!-- CL 32615 -->
-    Tests and benchmarks are now marked as failed if the race
-    detector is enabled and a data race occurs during execution.
-    Previously, individual test cases would appear to pass,
-    and only the overall execution of the test binary would fail.
+<!-- CL 32615 -->
+Tests and benchmarks are now marked as failed if the race
+detector is enabled and a data race occurs during execution.
+Previously, individual test cases would appear to pass,
+and only the overall execution of the test binary would fail.
 
-    <!-- CL 32455 -->
-    The signature of the
-    [`MainStart`](/pkg/testing/#MainStart)
-    function has changed, as allowed by the documentation. It is an
-    internal detail and not part of the Go 1 compatibility promise.
-    If you're not calling `MainStart` directly but see
-    errors, that likely means you set the
-    normally-empty `GOROOT` environment variable and it
-    doesn't match the version of your `go` command's binary.
+<!-- CL 32455 -->
+The signature of the
+[`MainStart`](/pkg/testing/#MainStart)
+function has changed, as allowed by the documentation. It is an
+internal detail and not part of the Go 1 compatibility promise.
+If you're not calling `MainStart` directly but see
+errors, that likely means you set the
+normally-empty `GOROOT` environment variable and it
+doesn't match the version of your `go` command's binary.
 
-[unicode](/pkg/unicode/)
+#### [unicode](/pkg/unicode/)
 
-:   <!-- CL 30935 -->
-    [`SimpleFold`](/pkg/unicode/#SimpleFold)
-    now returns its argument unchanged if the provided input was an invalid rune.
-    Previously, the implementation failed with an index bounds check panic.
+<!-- CL 30935 -->
+[`SimpleFold`](/pkg/unicode/#SimpleFold)
+now returns its argument unchanged if the provided input was an invalid rune.
+Previously, the implementation failed with an index bounds check panic.
diff --git a/_content/doc/go1.9.md b/_content/doc/go1.9.md
index 4b0879c..e07b61e 100644
--- a/_content/doc/go1.9.md
+++ b/_content/doc/go1.9.md
@@ -368,512 +368,512 @@
 made with the Go 1 [promise of compatibility](/doc/go1compat)
 in mind.
 
-[archive/zip](/pkg/archive/zip/)
+#### [archive/zip](/pkg/archive/zip/)
 
-:   <!-- CL 39570 -->
-    The
-    ZIP [`Writer`](/pkg/archive/zip/#Writer)
-    now sets the UTF-8 bit in
-    the [`FileHeader.Flags`](/pkg/archive/zip/#FileHeader.Flags)
-    when appropriate.
+<!-- CL 39570 -->
+The
+ZIP [`Writer`](/pkg/archive/zip/#Writer)
+now sets the UTF-8 bit in
+the [`FileHeader.Flags`](/pkg/archive/zip/#FileHeader.Flags)
+when appropriate.
 
 <!-- archive/zip -->
 
-[crypto/rand](/pkg/crypto/rand/)
+#### [crypto/rand](/pkg/crypto/rand/)
 
-:   <!-- CL 43852 -->
-    On Linux, Go now calls the `getrandom` system call
-    without the `GRND_NONBLOCK` flag; it will now block
-    until the kernel has sufficient randomness. On kernels predating
-    the `getrandom` system call, Go continues to read
-    from `/dev/urandom`.
+<!-- CL 43852 -->
+On Linux, Go now calls the `getrandom` system call
+without the `GRND_NONBLOCK` flag; it will now block
+until the kernel has sufficient randomness. On kernels predating
+the `getrandom` system call, Go continues to read
+from `/dev/urandom`.
 
 <!-- crypto/rand -->
 
-[crypto/x509](/pkg/crypto/x509/)
+#### [crypto/x509](/pkg/crypto/x509/)
 
-:   <!-- CL 36093 -->
-    On Unix systems the environment
-    variables `SSL_CERT_FILE`
-    and `SSL_CERT_DIR` can now be used to override the
-    system default locations for the SSL certificate file and SSL
-    certificate files directory, respectively.
+<!-- CL 36093 -->
+On Unix systems the environment
+variables `SSL_CERT_FILE`
+and `SSL_CERT_DIR` can now be used to override the
+system default locations for the SSL certificate file and SSL
+certificate files directory, respectively.
 
-    The FreeBSD file `/usr/local/etc/ssl/cert.pem` is
-    now included in the certificate search path.
+The FreeBSD file `/usr/local/etc/ssl/cert.pem` is
+now included in the certificate search path.
 
-    <!-- CL 36900 -->
-    The package now supports excluded domains in name constraints.
-    In addition to enforcing such constraints,
-    [`CreateCertificate`](/pkg/crypto/x509/#CreateCertificate)
-    will create certificates with excluded name constraints
-    if the provided template certificate has the new
-    field
-    [`ExcludedDNSDomains`](/pkg/crypto/x509/#Certificate.ExcludedDNSDomains)
-    populated.
+<!-- CL 36900 -->
+The package now supports excluded domains in name constraints.
+In addition to enforcing such constraints,
+[`CreateCertificate`](/pkg/crypto/x509/#CreateCertificate)
+will create certificates with excluded name constraints
+if the provided template certificate has the new
+field
+[`ExcludedDNSDomains`](/pkg/crypto/x509/#Certificate.ExcludedDNSDomains)
+populated.
 
-    <!-- CL 36696 -->
-    If any SAN extension, including with no DNS names, is present
-    in the certificate, then the Common Name from
-    [`Subject`](/pkg/crypto/x509/#Certificate.Subject) is ignored.
-    In previous releases, the code tested only whether DNS-name SANs were
-    present in a certificate.
+<!-- CL 36696 -->
+If any SAN extension, including with no DNS names, is present
+in the certificate, then the Common Name from
+[`Subject`](/pkg/crypto/x509/#Certificate.Subject) is ignored.
+In previous releases, the code tested only whether DNS-name SANs were
+present in a certificate.
 
 <!-- crypto/x509 -->
 
-[database/sql](/pkg/database/sql/)
+#### [database/sql](/pkg/database/sql/)
 
-:   <!-- CL 35476 -->
-    The package will now use a cached [`Stmt`](/pkg/database/sql/#Stmt) if
-    available in [`Tx.Stmt`](/pkg/database/sql/#Tx.Stmt).
-    This prevents statements from being re-prepared each time
-    [`Tx.Stmt`](/pkg/database/sql/#Tx.Stmt) is called.
+<!-- CL 35476 -->
+The package will now use a cached [`Stmt`](/pkg/database/sql/#Stmt) if
+available in [`Tx.Stmt`](/pkg/database/sql/#Tx.Stmt).
+This prevents statements from being re-prepared each time
+[`Tx.Stmt`](/pkg/database/sql/#Tx.Stmt) is called.
 
-    <!-- CL 38533 -->
-    The package now allows drivers to implement their own argument checkers by implementing
-    [`driver.NamedValueChecker`](/pkg/database/sql/driver/#NamedValueChecker).
-    This also allows drivers to support `OUTPUT` and `INOUT` parameter types.
-    [`Out`](/pkg/database/sql/#Out) should be used to return output parameters
-    when supported by the driver.
+<!-- CL 38533 -->
+The package now allows drivers to implement their own argument checkers by implementing
+[`driver.NamedValueChecker`](/pkg/database/sql/driver/#NamedValueChecker).
+This also allows drivers to support `OUTPUT` and `INOUT` parameter types.
+[`Out`](/pkg/database/sql/#Out) should be used to return output parameters
+when supported by the driver.
 
-    <!-- CL 39031 -->
-    [`Rows.Scan`](/pkg/database/sql/#Rows.Scan) can now scan user-defined string types.
-    Previously the package supported scanning into numeric types like `type` `Int` `int64`. It now also supports
-    scanning into string types like `type` `String` `string`.
+<!-- CL 39031 -->
+[`Rows.Scan`](/pkg/database/sql/#Rows.Scan) can now scan user-defined string types.
+Previously the package supported scanning into numeric types like `type` `Int` `int64`. It now also supports
+scanning into string types like `type` `String` `string`.
 
-    <!-- CL 40694 -->
-    The new [`DB.Conn`](/pkg/database/sql/#DB.Conn) method returns the new
-    [`Conn`](/pkg/database/sql/#Conn) type representing an
-    exclusive connection to the database from the connection pool. All queries run on
-    a [`Conn`](/pkg/database/sql/#Conn) will use the same underlying
-    connection until [`Conn.Close`](/pkg/database/sql/#Conn.Close) is called
-    to return the connection to the connection pool.
+<!-- CL 40694 -->
+The new [`DB.Conn`](/pkg/database/sql/#DB.Conn) method returns the new
+[`Conn`](/pkg/database/sql/#Conn) type representing an
+exclusive connection to the database from the connection pool. All queries run on
+a [`Conn`](/pkg/database/sql/#Conn) will use the same underlying
+connection until [`Conn.Close`](/pkg/database/sql/#Conn.Close) is called
+to return the connection to the connection pool.
 
 <!-- database/sql -->
 
-[encoding/asn1](/pkg/encoding/asn1/)
+#### [encoding/asn1](/pkg/encoding/asn1/)
 
-:   <!-- CL 38660 -->
-    The new
-    [`NullBytes`](/pkg/encoding/asn1/#NullBytes)
-    and
-    [`NullRawValue`](/pkg/encoding/asn1/#NullRawValue)
-    represent the ASN.1 NULL type.
+<!-- CL 38660 -->
+The new
+[`NullBytes`](/pkg/encoding/asn1/#NullBytes)
+and
+[`NullRawValue`](/pkg/encoding/asn1/#NullRawValue)
+represent the ASN.1 NULL type.
 
 <!-- encoding/asn1 -->
 
-[encoding/base32](/pkg/encoding/base32/)
+#### [encoding/base32](/pkg/encoding/base32/)
 
-:   <!-- CL 38634 -->
-    The new [Encoding.WithPadding](/pkg/encoding/base32/#Encoding.WithPadding)
-    method adds support for custom padding characters and disabling padding.
+<!-- CL 38634 -->
+The new [Encoding.WithPadding](/pkg/encoding/base32/#Encoding.WithPadding)
+method adds support for custom padding characters and disabling padding.
 
 <!-- encoding/base32 -->
 
-[encoding/csv](/pkg/encoding/csv/)
+#### [encoding/csv](/pkg/encoding/csv/)
 
-:   <!-- CL 41730 -->
-    The new field
-    [`Reader.ReuseRecord`](/pkg/encoding/csv/#Reader.ReuseRecord)
-    controls whether calls to
-    [`Read`](/pkg/encoding/csv/#Reader.Read)
-    may return a slice sharing the backing array of the previous
-    call's returned slice for improved performance.
+<!-- CL 41730 -->
+The new field
+[`Reader.ReuseRecord`](/pkg/encoding/csv/#Reader.ReuseRecord)
+controls whether calls to
+[`Read`](/pkg/encoding/csv/#Reader.Read)
+may return a slice sharing the backing array of the previous
+call's returned slice for improved performance.
 
 <!-- encoding/csv -->
 
-[fmt](/pkg/fmt/)
+#### [fmt](/pkg/fmt/)
 
-:   <!-- CL 37051 -->
-    The sharp flag ('`#`') is now supported when printing
-    floating point and complex numbers. It will always print a
-    decimal point
-    for `%e`, `%E`, `%f`, `%F`, `%g`
-    and `%G`; it will not remove trailing zeros
-    for `%g` and `%G`.
+<!-- CL 37051 -->
+The sharp flag ('`#`') is now supported when printing
+floating point and complex numbers. It will always print a
+decimal point
+for `%e`, `%E`, `%f`, `%F`, `%g`
+and `%G`; it will not remove trailing zeros
+for `%g` and `%G`.
 
 <!-- fmt -->
 
-[hash/fnv](/pkg/hash/fnv/)
+#### [hash/fnv](/pkg/hash/fnv/)
 
-:   <!-- CL 38356 -->
-    The package now includes 128-bit FNV-1 and FNV-1a hash support with
-    [`New128`](/pkg/hash/fnv/#New128) and
-    [`New128a`](/pkg/hash/fnv/#New128a), respectively.
+<!-- CL 38356 -->
+The package now includes 128-bit FNV-1 and FNV-1a hash support with
+[`New128`](/pkg/hash/fnv/#New128) and
+[`New128a`](/pkg/hash/fnv/#New128a), respectively.
 
 <!-- hash/fnv -->
 
-[html/template](/pkg/html/template/)
+#### [html/template](/pkg/html/template/)
 
-:   <!-- CL 37880, CL 40936 -->
-    The package now reports an error if a predefined escaper (one of
-    "html", "urlquery" and "js") is found in a pipeline and does not match
-    what the auto-escaper would have decided on its own.
-    This avoids certain security or correctness issues.
-    Now use of one of these escapers is always either a no-op or an error.
-    (The no-op case eases migration from [text/template](/pkg/text/template/).)
+<!-- CL 37880, CL 40936 -->
+The package now reports an error if a predefined escaper (one of
+"html", "urlquery" and "js") is found in a pipeline and does not match
+what the auto-escaper would have decided on its own.
+This avoids certain security or correctness issues.
+Now use of one of these escapers is always either a no-op or an error.
+(The no-op case eases migration from [text/template](/pkg/text/template/).)
 
 <!-- html/template -->
 
-[image](/pkg/image/)
+#### [image](/pkg/image/)
 
-:   <!-- CL 36734 -->
-    The [`Rectangle.Intersect`](/pkg/image/#Rectangle.Intersect)
-    method now returns a zero `Rectangle` when called on
-    adjacent but non-overlapping rectangles, as documented. In
-    earlier releases it would incorrectly return an empty but
-    non-zero `Rectangle`.
+<!-- CL 36734 -->
+The [`Rectangle.Intersect`](/pkg/image/#Rectangle.Intersect)
+method now returns a zero `Rectangle` when called on
+adjacent but non-overlapping rectangles, as documented. In
+earlier releases it would incorrectly return an empty but
+non-zero `Rectangle`.
 
 <!-- image -->
 
-[image/color](/pkg/image/color/)
+#### [image/color](/pkg/image/color/)
 
-:   <!-- CL 36732 -->
-    The YCbCr to RGBA conversion formula has been tweaked to ensure
-    that rounding adjustments span the complete [0, 0xffff] RGBA
-    range.
+<!-- CL 36732 -->
+The YCbCr to RGBA conversion formula has been tweaked to ensure
+that rounding adjustments span the complete [0, 0xffff] RGBA
+range.
 
 <!-- image/color -->
 
-[image/png](/pkg/image/png/)
+#### [image/png](/pkg/image/png/)
 
-:   <!-- CL 34150 -->
-    The new [`Encoder.BufferPool`](/pkg/image/png/#Encoder.BufferPool)
-    field allows specifying an [`EncoderBufferPool`](/pkg/image/png/#EncoderBufferPool),
-    that will be used by the encoder to get temporary `EncoderBuffer`
-    buffers when encoding a PNG image.
-    The use of a `BufferPool` reduces the number of
-    memory allocations performed while encoding multiple images.
+<!-- CL 34150 -->
+The new [`Encoder.BufferPool`](/pkg/image/png/#Encoder.BufferPool)
+field allows specifying an [`EncoderBufferPool`](/pkg/image/png/#EncoderBufferPool),
+that will be used by the encoder to get temporary `EncoderBuffer`
+buffers when encoding a PNG image.
+The use of a `BufferPool` reduces the number of
+memory allocations performed while encoding multiple images.
 
-    <!-- CL 38271 -->
-    The package now supports the decoding of transparent 8-bit
-    grayscale ("Gray8") images.
+<!-- CL 38271 -->
+The package now supports the decoding of transparent 8-bit
+grayscale ("Gray8") images.
 
 <!-- image/png -->
 
-[math/big](/pkg/math/big/)
+#### [math/big](/pkg/math/big/)
 
-:   <!-- CL 36487 -->
-    The new
-    [`IsInt64`](/pkg/math/big/#Int.IsInt64)
-    and
-    [`IsUint64`](/pkg/math/big/#Int.IsUint64)
-    methods report whether an `Int`
-    may be represented as an `int64` or `uint64`
-    value.
+<!-- CL 36487 -->
+The new
+[`IsInt64`](/pkg/math/big/#Int.IsInt64)
+and
+[`IsUint64`](/pkg/math/big/#Int.IsUint64)
+methods report whether an `Int`
+may be represented as an `int64` or `uint64`
+value.
 
 <!-- math/big -->
 
-[mime/multipart](/pkg/mime/multipart/)
+#### [mime/multipart](/pkg/mime/multipart/)
 
-:   <!-- CL 39223 -->
-    The new
-    [`FileHeader.Size`](/pkg/mime/multipart/#FileHeader.Size)
-    field describes the size of a file in a multipart message.
+<!-- CL 39223 -->
+The new
+[`FileHeader.Size`](/pkg/mime/multipart/#FileHeader.Size)
+field describes the size of a file in a multipart message.
 
 <!-- mime/multipart -->
 
-[net](/pkg/net/)
+#### [net](/pkg/net/)
 
-:   <!-- CL 32572 -->
-    The new
-    [`Resolver.StrictErrors`](/pkg/net/#Resolver.StrictErrors)
-    provides control over how Go's built-in DNS resolver handles
-    temporary errors during queries composed of multiple sub-queries,
-    such as an A+AAAA address lookup.
+<!-- CL 32572 -->
+The new
+[`Resolver.StrictErrors`](/pkg/net/#Resolver.StrictErrors)
+provides control over how Go's built-in DNS resolver handles
+temporary errors during queries composed of multiple sub-queries,
+such as an A+AAAA address lookup.
 
-    <!-- CL 37260 -->
-    The new
-    [`Resolver.Dial`](/pkg/net/#Resolver.Dial)
-    allows a `Resolver` to use a custom dial function.
+<!-- CL 37260 -->
+The new
+[`Resolver.Dial`](/pkg/net/#Resolver.Dial)
+allows a `Resolver` to use a custom dial function.
 
-    <!-- CL 40510 -->
-    [`JoinHostPort`](/pkg/net/#JoinHostPort) now only places an address in square brackets if the host contains a colon.
-    In previous releases it would also wrap addresses in square brackets if they contained a percent ('`%`') sign.
+<!-- CL 40510 -->
+[`JoinHostPort`](/pkg/net/#JoinHostPort) now only places an address in square brackets if the host contains a colon.
+In previous releases it would also wrap addresses in square brackets if they contained a percent ('`%`') sign.
 
-    <!-- CL 37913 -->
-    The new methods
-    [`TCPConn.SyscallConn`](/pkg/net/#TCPConn.SyscallConn),
-    [`IPConn.SyscallConn`](/pkg/net/#IPConn.SyscallConn),
-    [`UDPConn.SyscallConn`](/pkg/net/#UDPConn.SyscallConn),
-    and
-    [`UnixConn.SyscallConn`](/pkg/net/#UnixConn.SyscallConn)
-    provide access to the connections' underlying file descriptors.
+<!-- CL 37913 -->
+The new methods
+[`TCPConn.SyscallConn`](/pkg/net/#TCPConn.SyscallConn),
+[`IPConn.SyscallConn`](/pkg/net/#IPConn.SyscallConn),
+[`UDPConn.SyscallConn`](/pkg/net/#UDPConn.SyscallConn),
+and
+[`UnixConn.SyscallConn`](/pkg/net/#UnixConn.SyscallConn)
+provide access to the connections' underlying file descriptors.
 
-    <!-- 45088 -->
-    It is now safe to call [`Dial`](/pkg/net/#Dial) with the address obtained from
-    `(*TCPListener).String()` after creating the listener with
-    <code>[Listen](/pkg/net/#Listen)("tcp", ":0")</code>.
-    Previously it failed on some machines with half-configured IPv6 stacks.
+<!-- 45088 -->
+It is now safe to call [`Dial`](/pkg/net/#Dial) with the address obtained from
+`(*TCPListener).String()` after creating the listener with
+<code>[Listen](/pkg/net/#Listen)("tcp", ":0")</code>.
+Previously it failed on some machines with half-configured IPv6 stacks.
 
 <!-- net -->
 
-[net/http](/pkg/net/http/)
+#### [net/http](/pkg/net/http/)
 
-:   <!-- CL 37328 -->
-    The [`Cookie.String`](/pkg/net/http/#Cookie.String) method, used for
-    `Cookie` and `Set-Cookie` headers, now encloses values in double quotes
-    if the value contains either a space or a comma.
+<!-- CL 37328 -->
+The [`Cookie.String`](/pkg/net/http/#Cookie.String) method, used for
+`Cookie` and `Set-Cookie` headers, now encloses values in double quotes
+if the value contains either a space or a comma.
 
-    Server changes:
+Server changes:
 
-      - <!-- CL 38194 -->
-        [`ServeMux`](/pkg/net/http/#ServeMux) now ignores ports in the host
-        header when matching handlers. The host is matched unmodified for `CONNECT` requests.
-      - <!-- CL 44074 -->
-        The new [`Server.ServeTLS`](/pkg/net/http/#Server.ServeTLS) method wraps
-        [`Server.Serve`](/pkg/net/http/#Server.Serve) with added TLS support.
-      - <!-- CL 34727 -->
-        [`Server.WriteTimeout`](/pkg/net/http/#Server.WriteTimeout)
-        now applies to HTTP/2 connections and is enforced per-stream.
-      - <!-- CL 43231 -->
-        HTTP/2 now uses the priority write scheduler by default.
-        Frames are scheduled by following HTTP/2 priorities as described in
-        [RFC 7540 Section 5.3](https://tools.ietf.org/html/rfc7540#section-5.3).
-      - <!-- CL 36483 -->
-        The HTTP handler returned by [`StripPrefix`](/pkg/net/http/#StripPrefix)
-        now calls its provided handler with a modified clone of the original `*http.Request`.
-        Any code storing per-request state in maps keyed by `*http.Request` should
-        use
-        [`Request.Context`](/pkg/net/http/#Request.Context),
-        [`Request.WithContext`](/pkg/net/http/#Request.WithContext),
-        and
-        [`context.WithValue`](/pkg/context/#WithValue) instead.
-      - <!-- CL 35490 -->
-        [`LocalAddrContextKey`](/pkg/net/http/#LocalAddrContextKey) now contains
-        the connection's actual network address instead of the interface address used by the listener.
+  - <!-- CL 38194 -->
+    [`ServeMux`](/pkg/net/http/#ServeMux) now ignores ports in the host
+    header when matching handlers. The host is matched unmodified for `CONNECT` requests.
+  - <!-- CL 44074 -->
+    The new [`Server.ServeTLS`](/pkg/net/http/#Server.ServeTLS) method wraps
+    [`Server.Serve`](/pkg/net/http/#Server.Serve) with added TLS support.
+  - <!-- CL 34727 -->
+    [`Server.WriteTimeout`](/pkg/net/http/#Server.WriteTimeout)
+    now applies to HTTP/2 connections and is enforced per-stream.
+  - <!-- CL 43231 -->
+    HTTP/2 now uses the priority write scheduler by default.
+    Frames are scheduled by following HTTP/2 priorities as described in
+    [RFC 7540 Section 5.3](https://tools.ietf.org/html/rfc7540#section-5.3).
+  - <!-- CL 36483 -->
+    The HTTP handler returned by [`StripPrefix`](/pkg/net/http/#StripPrefix)
+    now calls its provided handler with a modified clone of the original `*http.Request`.
+    Any code storing per-request state in maps keyed by `*http.Request` should
+    use
+    [`Request.Context`](/pkg/net/http/#Request.Context),
+    [`Request.WithContext`](/pkg/net/http/#Request.WithContext),
+    and
+    [`context.WithValue`](/pkg/context/#WithValue) instead.
+  - <!-- CL 35490 -->
+    [`LocalAddrContextKey`](/pkg/net/http/#LocalAddrContextKey) now contains
+    the connection's actual network address instead of the interface address used by the listener.
 
-    Client & Transport changes:
+Client & Transport changes:
 
-      - <!-- CL 35488 -->
-        The [`Transport`](/pkg/net/http/#Transport)
-        now supports making requests via SOCKS5 proxy when the URL returned by
-        [`Transport.Proxy`](/pkg/net/http/#Transport.Proxy)
-        has the scheme `socks5`.
+  - <!-- CL 35488 -->
+    The [`Transport`](/pkg/net/http/#Transport)
+    now supports making requests via SOCKS5 proxy when the URL returned by
+    [`Transport.Proxy`](/pkg/net/http/#Transport.Proxy)
+    has the scheme `socks5`.
 
 <!-- net/http -->
 
-[net/http/fcgi](/pkg/net/http/fcgi/)
+#### [net/http/fcgi](/pkg/net/http/fcgi/)
 
-:   <!-- CL 40012 -->
-    The new
-    [`ProcessEnv`](/pkg/net/http/fcgi/#ProcessEnv)
-    function returns FastCGI environment variables associated with an HTTP request
-    for which there are no appropriate
-    [`http.Request`](/pkg/net/http/#Request)
-    fields, such as `REMOTE_USER`.
+<!-- CL 40012 -->
+The new
+[`ProcessEnv`](/pkg/net/http/fcgi/#ProcessEnv)
+function returns FastCGI environment variables associated with an HTTP request
+for which there are no appropriate
+[`http.Request`](/pkg/net/http/#Request)
+fields, such as `REMOTE_USER`.
 
 <!-- net/http/fcgi -->
 
-[net/http/httptest](/pkg/net/http/httptest/)
+#### [net/http/httptest](/pkg/net/http/httptest/)
 
-:   <!-- CL 34639 -->
-    The new
-    [`Server.Client`](/pkg/net/http/httptest/#Server.Client)
-    method returns an HTTP client configured for making requests to the test server.
+<!-- CL 34639 -->
+The new
+[`Server.Client`](/pkg/net/http/httptest/#Server.Client)
+method returns an HTTP client configured for making requests to the test server.
 
-    The new
-    [`Server.Certificate`](/pkg/net/http/httptest/#Server.Certificate)
-    method returns the test server's TLS certificate, if any.
+The new
+[`Server.Certificate`](/pkg/net/http/httptest/#Server.Certificate)
+method returns the test server's TLS certificate, if any.
 
 <!-- net/http/httptest -->
 
-[net/http/httputil](/pkg/net/http/httputil/)
+#### [net/http/httputil](/pkg/net/http/httputil/)
 
-:   <!-- CL 43712 -->
-    The [`ReverseProxy`](/pkg/net/http/httputil/#ReverseProxy)
-    now proxies all HTTP/2 response trailers, even those not declared in the initial response
-    header. Such undeclared trailers are used by the gRPC protocol.
+<!-- CL 43712 -->
+The [`ReverseProxy`](/pkg/net/http/httputil/#ReverseProxy)
+now proxies all HTTP/2 response trailers, even those not declared in the initial response
+header. Such undeclared trailers are used by the gRPC protocol.
 
 <!-- net/http/httputil -->
 
-[os](/pkg/os/)
+#### [os](/pkg/os/)
 
-:   <!-- CL 36800 -->
-    The `os` package now uses the internal runtime poller
-    for file I/O.
-    This reduces the number of threads required for read/write
-    operations on pipes, and it eliminates races when one goroutine
-    closes a file while another is using the file for I/O.
+<!-- CL 36800 -->
+The `os` package now uses the internal runtime poller
+for file I/O.
+This reduces the number of threads required for read/write
+operations on pipes, and it eliminates races when one goroutine
+closes a file while another is using the file for I/O.
 
-    <!-- CL 37915 -->
-    On Windows,
-    [`Args`](/pkg/os/#Args)
-    is now populated without `shell32.dll`, improving process start-up time by 1-7 ms.
+<!-- CL 37915 -->
+On Windows,
+[`Args`](/pkg/os/#Args)
+is now populated without `shell32.dll`, improving process start-up time by 1-7 ms.
 
 <!-- os -->
 
-[os/exec](/pkg/os/exec/)
+#### [os/exec](/pkg/os/exec/)
 
-:   <!-- CL 37586 -->
-    The `os/exec` package now prevents child processes from being created with
-    any duplicate environment variables.
-    If [`Cmd.Env`](/pkg/os/exec/#Cmd.Env)
-    contains duplicate environment keys, only the last
-    value in the slice for each duplicate key is used.
+<!-- CL 37586 -->
+The `os/exec` package now prevents child processes from being created with
+any duplicate environment variables.
+If [`Cmd.Env`](/pkg/os/exec/#Cmd.Env)
+contains duplicate environment keys, only the last
+value in the slice for each duplicate key is used.
 
 <!-- os/exec -->
 
-[os/user](/pkg/os/user/)
+#### [os/user](/pkg/os/user/)
 
-:   <!-- CL 37664 -->
-    [`Lookup`](/pkg/os/user/#Lookup) and
-    [`LookupId`](/pkg/os/user/#LookupId) now
-    work on Unix systems when `CGO_ENABLED=0` by reading
-    the `/etc/passwd` file.
+<!-- CL 37664 -->
+[`Lookup`](/pkg/os/user/#Lookup) and
+[`LookupId`](/pkg/os/user/#LookupId) now
+work on Unix systems when `CGO_ENABLED=0` by reading
+the `/etc/passwd` file.
 
-    <!-- CL 33713 -->
-    [`LookupGroup`](/pkg/os/user/#LookupGroup) and
-    [`LookupGroupId`](/pkg/os/user/#LookupGroupId) now
-    work on Unix systems when `CGO_ENABLED=0` by reading
-    the `/etc/group` file.
+<!-- CL 33713 -->
+[`LookupGroup`](/pkg/os/user/#LookupGroup) and
+[`LookupGroupId`](/pkg/os/user/#LookupGroupId) now
+work on Unix systems when `CGO_ENABLED=0` by reading
+the `/etc/group` file.
 
 <!-- os/user -->
 
-[reflect](/pkg/reflect/)
+#### [reflect](/pkg/reflect/)
 
-:   <!-- CL 38335 -->
-    The new
-    [`MakeMapWithSize`](/pkg/reflect/#MakeMapWithSize)
-    function creates a map with a capacity hint.
+<!-- CL 38335 -->
+The new
+[`MakeMapWithSize`](/pkg/reflect/#MakeMapWithSize)
+function creates a map with a capacity hint.
 
 <!-- reflect -->
 
-[runtime](/pkg/runtime/)
+#### [runtime](/pkg/runtime/)
 
-:   <!-- CL 37233, CL 37726 -->
-    Tracebacks generated by the runtime and recorded in profiles are
-    now accurate in the presence of inlining.
-    To retrieve tracebacks programmatically, applications should use
-    [`runtime.CallersFrames`](/pkg/runtime/#CallersFrames)
-    rather than directly iterating over the results of
-    [`runtime.Callers`](/pkg/runtime/#Callers).
+<!-- CL 37233, CL 37726 -->
+Tracebacks generated by the runtime and recorded in profiles are
+now accurate in the presence of inlining.
+To retrieve tracebacks programmatically, applications should use
+[`runtime.CallersFrames`](/pkg/runtime/#CallersFrames)
+rather than directly iterating over the results of
+[`runtime.Callers`](/pkg/runtime/#Callers).
 
-    <!-- CL 38403 -->
-    On Windows, Go no longer forces the system timer to run at high
-    resolution when the program is idle.
-    This should reduce the impact of Go programs on battery life.
+<!-- CL 38403 -->
+On Windows, Go no longer forces the system timer to run at high
+resolution when the program is idle.
+This should reduce the impact of Go programs on battery life.
 
-    <!-- CL 29341 -->
-    On FreeBSD, `GOMAXPROCS` and
-    [`runtime.NumCPU`](/pkg/runtime/#NumCPU)
-    are now based on the process' CPU mask, rather than the total
-    number of CPUs.
+<!-- CL 29341 -->
+On FreeBSD, `GOMAXPROCS` and
+[`runtime.NumCPU`](/pkg/runtime/#NumCPU)
+are now based on the process' CPU mask, rather than the total
+number of CPUs.
 
-    <!-- CL 43641 -->
-    The runtime has preliminary support for Android O.
+<!-- CL 43641 -->
+The runtime has preliminary support for Android O.
 
 <!-- runtime -->
 
-[runtime/debug](/pkg/runtime/debug/)
+#### [runtime/debug](/pkg/runtime/debug/)
 
-:   <!-- CL 34013 -->
-    Calling
-    [`SetGCPercent`](/pkg/runtime/debug/#SetGCPercent)
-    with a negative value no longer runs an immediate garbage collection.
+<!-- CL 34013 -->
+Calling
+[`SetGCPercent`](/pkg/runtime/debug/#SetGCPercent)
+with a negative value no longer runs an immediate garbage collection.
 
 <!-- runtime/debug -->
 
-[runtime/trace](/pkg/runtime/trace/)
+#### [runtime/trace](/pkg/runtime/trace/)
 
-:   <!-- CL 36015 -->
-    The execution trace now displays mark assist events, which
-    indicate when an application goroutine is forced to assist
-    garbage collection because it is allocating too quickly.
+<!-- CL 36015 -->
+The execution trace now displays mark assist events, which
+indicate when an application goroutine is forced to assist
+garbage collection because it is allocating too quickly.
 
-    <!-- CL 40810 -->
-    "Sweep" events now encompass the entire process of finding free
-    space for an allocation, rather than recording each individual
-    span that is swept.
-    This reduces allocation latency when tracing allocation-heavy
-    programs.
-    The sweep event shows how many bytes were swept and how many
-    were reclaimed.
+<!-- CL 40810 -->
+"Sweep" events now encompass the entire process of finding free
+space for an allocation, rather than recording each individual
+span that is swept.
+This reduces allocation latency when tracing allocation-heavy
+programs.
+The sweep event shows how many bytes were swept and how many
+were reclaimed.
 
 <!-- runtime/trace -->
 
-[sync](/pkg/sync/)
+#### [sync](/pkg/sync/)
 
-:   <!-- CL 34310 -->
-    [`Mutex`](/pkg/sync/#Mutex) is now more fair.
+<!-- CL 34310 -->
+[`Mutex`](/pkg/sync/#Mutex) is now more fair.
 
 <!-- sync -->
 
-[syscall](/pkg/syscall/)
+#### [syscall](/pkg/syscall/)
 
-:   <!-- CL 36697 -->
-    The new field
-    [`Credential.NoSetGroups`](/pkg/syscall/#Credential.NoSetGroups)
-    controls whether Unix systems make a `setgroups` system call
-    to set supplementary groups when starting a new process.
+<!-- CL 36697 -->
+The new field
+[`Credential.NoSetGroups`](/pkg/syscall/#Credential.NoSetGroups)
+controls whether Unix systems make a `setgroups` system call
+to set supplementary groups when starting a new process.
 
-    <!-- CL 43512 -->
-    The new field
-    [`SysProcAttr.AmbientCaps`](/pkg/syscall/#SysProcAttr.AmbientCaps)
-    allows setting ambient capabilities on Linux 4.3+ when creating
-    a new process.
+<!-- CL 43512 -->
+The new field
+[`SysProcAttr.AmbientCaps`](/pkg/syscall/#SysProcAttr.AmbientCaps)
+allows setting ambient capabilities on Linux 4.3+ when creating
+a new process.
 
-    <!-- CL 37439 -->
-    On 64-bit x86 Linux, process creation latency has been optimized with
-    use of `CLONE_VFORK` and `CLONE_VM`.
+<!-- CL 37439 -->
+On 64-bit x86 Linux, process creation latency has been optimized with
+use of `CLONE_VFORK` and `CLONE_VM`.
 
-    <!-- CL 37913 -->
-    The new
-    [`Conn`](/pkg/syscall/#Conn)
-    interface describes some types in the
-    [`net`](/pkg/net/)
-    package that can provide access to their underlying file descriptor
-    using the new
-    [`RawConn`](/pkg/syscall/#RawConn)
-    interface.
+<!-- CL 37913 -->
+The new
+[`Conn`](/pkg/syscall/#Conn)
+interface describes some types in the
+[`net`](/pkg/net/)
+package that can provide access to their underlying file descriptor
+using the new
+[`RawConn`](/pkg/syscall/#RawConn)
+interface.
 
 <!-- syscall -->
 
-[testing/quick](/pkg/testing/quick/)
+#### [testing/quick](/pkg/testing/quick/)
 
-:   <!-- CL 39152 -->
-    The package now chooses values in the full range when
-    generating `int64` and `uint64` random
-    numbers; in earlier releases generated values were always
-    limited to the [-2<sup>62</sup>, 2<sup>62</sup>) range.
+<!-- CL 39152 -->
+The package now chooses values in the full range when
+generating `int64` and `uint64` random
+numbers; in earlier releases generated values were always
+limited to the [-2<sup>62</sup>, 2<sup>62</sup>) range.
 
-    In previous releases, using a nil
-    [`Config.Rand`](/pkg/testing/quick/#Config.Rand)
-    value caused a fixed deterministic random number generator to be used.
-    It now uses a random number generator seeded with the current time.
-    For the old behavior, set `Config.Rand` to `rand.New(rand.NewSource(0))`.
+In previous releases, using a nil
+[`Config.Rand`](/pkg/testing/quick/#Config.Rand)
+value caused a fixed deterministic random number generator to be used.
+It now uses a random number generator seeded with the current time.
+For the old behavior, set `Config.Rand` to `rand.New(rand.NewSource(0))`.
 
 <!-- testing/quick -->
 
-[text/template](/pkg/text/template/)
+#### [text/template](/pkg/text/template/)
 
-:   <!-- CL 38420 -->
-    The handling of empty blocks, which was broken by a Go 1.8
-    change that made the result dependent on the order of templates,
-    has been fixed, restoring the old Go 1.7 behavior.
+<!-- CL 38420 -->
+The handling of empty blocks, which was broken by a Go 1.8
+change that made the result dependent on the order of templates,
+has been fixed, restoring the old Go 1.7 behavior.
 
 <!-- text/template -->
 
-[time](/pkg/time/)
+#### [time](/pkg/time/)
 
-:   <!-- CL 36615 -->
-    The new methods
-    [`Duration.Round`](/pkg/time/#Duration.Round)
-    and
-    [`Duration.Truncate`](/pkg/time/#Duration.Truncate)
-    handle rounding and truncating durations to multiples of a given duration.
+<!-- CL 36615 -->
+The new methods
+[`Duration.Round`](/pkg/time/#Duration.Round)
+and
+[`Duration.Truncate`](/pkg/time/#Duration.Truncate)
+handle rounding and truncating durations to multiples of a given duration.
 
-    <!-- CL 35710 -->
-    Retrieving the time and sleeping now work correctly under Wine.
+<!-- CL 35710 -->
+Retrieving the time and sleeping now work correctly under Wine.
 
-    If a `Time` value has a monotonic clock reading, its
-    string representation (as returned by `String`) now includes a
-    final field `"m=±value"`, where `value` is the
-    monotonic clock reading formatted as a decimal number of seconds.
+If a `Time` value has a monotonic clock reading, its
+string representation (as returned by `String`) now includes a
+final field `"m=±value"`, where `value` is the
+monotonic clock reading formatted as a decimal number of seconds.
 
-    <!-- CL 44832 -->
-    The included `tzdata` timezone database has been
-    updated to version 2017b. As always, it is only used if the
-    system does not already have the database available.
+<!-- CL 44832 -->
+The included `tzdata` timezone database has been
+updated to version 2017b. As always, it is only used if the
+system does not already have the database available.
 
 <!-- time -->
