From bcb89fc17a0ff8b588a8d413fa120cc89e053561 Mon Sep 17 00:00:00 2001
From: Carlos Amedee
-
- Go 1.18 is not yet released. These are work-in-progress
- release notes. Go 1.18 is expected to be released in February 2022.
-
-
- Go 1.18 includes an implementation of generic features as described by the
- Type
- Parameters Proposal.
- This includes major - but fully backward-compatible - changes to the language.
-
- These new language changes required a large amount of new code that
- has not had significant testing in production settings. That will
- only happen as more people write and use generic code. We believe
- that this feature is well implemented and high quality. However,
- unlike most aspects of Go, we can't back up that belief with real
- world experience. Therefore, while we encourage the use of generics
- where it makes sense, please use appropriate caution when deploying
- generic code in production.
-
- While we believe that the new language features are well designed
- and clearly specified, it is possible that we have made mistakes.
- We want to stress that the Go 1
- compatibility guarantee says "If it becomes necessary to address
- an inconsistency or incompleteness in the specification, resolving
- the issue could affect the meaning or legality of existing
- programs. We reserve the right to address such issues, including
- updating the implementations." It also says "If a compiler or
- library has a bug that violates the specification, a program that
- depends on the buggy behavior may break if the bug is fixed. We
- reserve the right to fix such bugs." In other words, it is possible
- that there will be code using generics that will work with the 1.18
- release but break in later releases. We do not plan or expect to
- make any such change. However, breaking 1.18 programs in future
- releases may become necessary for reasons that we cannot today
- foresee. We will minimize any such breakage as much as possible, but
- we can't guarantee that the breakage will be zero.
-
- The following is a list of the most visible changes. For a more comprehensive overview, see the
- proposal.
- For details see the language spec.
-
- There are three experimental packages using generics that may be
- useful.
- These packages are in x/exp repository; their API is not covered by
- the Go 1 guarantee and may change as we gain more experience with
- generics.
-
- Constraints that are useful for generic code, such as
-
- A collection of generic functions that operate on slices of
- any element type.
-
- A collection of generic functions that operate on maps of
- any key or element type.
- DRAFT RELEASE NOTES â Introduction to Go 1.18
-
-Changes to the language
-
-Generics
-
-
-
-
-~
has been added to the set of
- operators and punctuation.
- ~T
type elements. Such interfaces may only be used
- as type constraints.
- An interface now defines a set of types as well as a set of methods.
- any
is an alias for the empty interface. It may be used instead of
- interface{}
.
- comparable
is an interface that denotes the set of all types which can be
- compared using ==
or !=
. It may only be used as (or embedded in)
- a type constraint.
-
-
-golang.org/x/exp/constraints
constraints.Ordered
.
- golang.org/x/exp/slices
golang.org/x/exp/maps
- The current generics implementation has the following limitations: -
real
, imag
, and complex
.
- We hope to remove this restriction in Go 1.19.
- m
on a value
- x
of type parameter type P
if m
is explicitly
- declared by P
's constraint interface.
- Similarly, method values x.m
and method expressions
- P.m
also are only supported if m
is explicitly
- declared by P
, even though m
might be in the method set
- of P
by virtue of the fact that all types in P
implement
- m
. We hope to remove this restriction in Go 1.19.
-
- The Go 1.18 compiler now correctly reports declared but not used
errors
- for variables that are set inside a function literal but are never used. Before Go 1.18,
- the compiler did not report an error in such cases. This fixes long-outstanding compiler
- issue #8560. As a result of this change,
- (possibly incorrect) programs may not compile anymore. The necessary fix is
- straightforward: fix the program if it was in fact incorrect, or use the offending
- variable, for instance by assigning it to the blank identifier _
.
- Since go vet
always pointed out this error, the number of affected
- programs is likely very small.
-
- The Go 1.18 compiler now reports an overflow when passing a rune constant expression
- such as '1' << 32
as an argument to the predeclared functions
- print
and println
, consistent with the behavior of
- user-defined functions. Before Go 1.18, the compiler did not report an error
- in such cases but silently accepted such constant arguments if they fit into an
- int64
. As a result of this change, (possibly incorrect) programs
- may not compile anymore. The necessary fix is straightforward: fix the program if it
- was in fact incorrect, or explicitly convert the offending argument to the correct type.
- Since go vet
always pointed out this error, the number of affected
- programs is likely very small.
-
- Go 1.18 introduces the new GOAMD64
environment variable, which selects at compile time
- a minimum target version of the AMD64 architecture. Allowed values are v1
,
- v2
, v3
, or v4
. Each higher level requires,
- and takes advantage of, additional processor features. A detailed
- description can be found
- here.
-
- The GOAMD64
environment variable defaults to v1
.
-
- The 64-bit RISC-V architecture on Linux (the linux/riscv64
port)
- now supports the c-archive
and c-shared
build modes.
-
- Go 1.18 requires Linux kernel version 2.6.32 or later. -
- -
- The windows/arm
and windows/arm64
ports now support
- non-cooperative preemption, bringing that capability to all four Windows
- ports, which should hopefully address subtle bugs encountered when calling
- into Win32 functions that block for extended periods of time.
-
- On iOS (the ios/arm64
port)
- and iOS simulator running on AMD64-based macOS (the ios/amd64
port),
- Go 1.18 now requires iOS 12 or later; support for previous versions has been discontinued.
-
- Go 1.18 is the last release that is supported on FreeBSD 11.x, which has - already reached end-of-life. Go 1.19 will require FreeBSD 12.2+ or FreeBSD - 13.0+. - FreeBSD 13.0+ will require a kernel with the COMPAT_FREEBSD12 option set (this is the default). -
- -- Go 1.18 includes an implementation of fuzzing as described by - the fuzzing proposal. -
- -- See the fuzzing landing page to get - started. -
- -
- Please be aware that fuzzing can consume a lot of memory and may impact your
- machineâs performance while it runs. Also be aware that the fuzzing engine
- writes values that expand test coverage to a fuzz cache directory within
- $GOCACHE/fuzz
while it runs. There is currently no limit to the
- number of files or total bytes that may be written to the fuzz cache, so it
- may occupy a large amount of storage (possibly several GBs).
-
go
get
- go
get
no longer builds or installs packages in
- module-aware mode. go
get
is now dedicated to
- adjusting dependencies in go.mod
. Effectively, the
- -d
flag is always enabled. To install the latest version
- of an executable outside the context of the current module, use
- go
- install
example.com/cmd@latest
. Any
- version query
- may be used instead of latest
. This form of go
- install
was added in Go 1.16, so projects supporting older
- versions may need to provide install instructions for both go
- install
and go
get
. go
- get
now reports an error when used outside a module, since there
- is no go.mod
file to update. In GOPATH mode (with
- GO111MODULE=off
), go
get
still builds
- and installs packages, as before.
-
go.mod
and go.sum
updates
- The go
mod
graph
,
- go
mod
vendor
,
- go
mod
verify
, and
- go
mod
why
subcommands
- no longer automatically update the go.mod
and
- go.sum
files.
- (Those files can be updated explicitly using go
get
,
- go
mod
tidy
, or
- go
mod
download
.)
-
go
version
- The go
command now embeds version control information in
- binaries. It includes the currently checked-out revision, commit time, and a
- flag indicating whether edited or untracked files are present. Version
- control information is embedded if the go
command is invoked in
- a directory within a Git, Mercurial, Fossil, or Bazaar repository, and the
- main
package and its containing main module are in the same
- repository. This information may be omitted using the flag
- -buildvcs=false
.
-
- Additionally, the go
command embeds information about the build,
- including build and tool tags (set with -tags
), compiler,
- assembler, and linker flags (like -gcflags
), whether cgo was
- enabled, and if it was, the values of the cgo environment variables
- (like CGO_CFLAGS
).
- Both VCS and build information may be read together with module
- information using
- go
version
-m
file
or
- runtime/debug.ReadBuildInfo
(for the currently running binary)
- or the new debug/buildinfo
- package.
-
- The underlying data format of the embedded build information can change with
- new go releases, so an older version of go
may not handle the
- build information produced with a newer version of go
.
- To read the version information from a binary built with go
1.18,
- use the go
version
command and the
- debug/buildinfo
package from go
1.18+.
-
go
mod
download
- If the main module's go.mod
file
- specifies go
1.17
- or higher, go
mod
download
without
- arguments now downloads source code for only the modules
- explicitly required in the main
- module's go.mod
file. (In a go
1.17
or
- higher module, that set already includes all dependencies needed to build the
- packages and tests in the main module.)
- To also download source code for transitive dependencies, use
- go
mod
download
all
.
-
go
mod
vendor
- The go
mod
vendor
subcommand now
- supports a -o
flag to set the output directory.
- (Other go
commands still read from the vendor
- directory at the module root when loading packages
- with -mod=vendor
, so the main use for this flag is for
- third-party tools that need to collect package source code.)
-
go
mod
tidy
- The go
mod
tidy
command now retains
- additional checksums in the go.sum
file for modules whose source
- code is needed to verify that each imported package is provided by only one
- module in the build list. Because this
- condition is rare and failure to apply it results in a build error, this
- change is not conditioned on the go
version in the main
- module's go.mod
file.
-
go
work
- The go
command now supports a "Workspace" mode. If a
- go.work
file is found in the working directory or a
- parent directory, or one is specified using the GOWORK
- environment variable, it will put the go
command into workspace mode.
- In workspace mode, the go.work
file will be used to
- determine the set of main modules used as the roots for module
- resolution, instead of using the normally-found go.mod
- file to specify the single main module. For more information see the
- go work
- documentation.
-
go
build
-asan
- The go
build
command and related commands
- now support an -asan
flag that enables interoperation
- with C (or C++) code compiled with the address sanitizer (C compiler
- option -fsanitize=address
).
-
go
test
- The go
command now supports additional command line
- options for the new fuzzing support described
- above:
-
go test
supports
- -fuzz
, -fuzztime
, and
- -fuzzminimizetime
options.
- For documentation on these see
- go help testflag
.
- go clean
supports a -fuzzcache
- option.
- For documentation see
- go help clean
.
- //go:build
lines
-Go 1.17 introduced //go:build
lines as a more readable way to write build constraints,
-instead of //
+build
lines.
-As of Go 1.17, gofmt
adds //go:build
lines
-to match existing +build
lines and keeps them in sync,
-while go
vet
diagnoses when they are out of sync.
-
Since the release of Go 1.18 marks the end of support for Go 1.16,
-all supported versions of Go now understand //go:build
lines.
-In Go 1.18, go
fix
now removes the now-obsolete
-//
+build
lines in modules declaring
-go
1.17
or later in their go.mod
files.
-
-For more information, see https://go.dev/design/draft-gobuild. -
- -
- gofmt
now reads and formats input files concurrently, with a
- memory limit proportional to GOMAXPROCS
. On a machine with
- multiple CPUs, gofmt
should now be significantly faster.
-
- The vet
tool is updated to support generic code. In most cases,
- it reports an error in generic code whenever it would report an error in the
- equivalent non-generic code after substituting for type parameters with a
- type from their
- type set.
-
- For example, vet
reports a format error in
-
func Print[T ~int|~string](t T) { - fmt.Printf("%d", t) -}- because it would report a format error in the non-generic equivalent of -
Print[string]
:
- func PrintString(x string) { - fmt.Printf("%d", x) -}- - -
- The cmd/vet
checkers copylock
, printf
,
- sortslice
, testinggoroutine
, and tests
- have all had moderate precision improvements to handle additional code patterns.
- This may lead to newly reported errors in existing packages. For example, the
- printf
checker now tracks formatting strings created by
- concatenating string constants. So vet
will report an error in:
-
- // fmt.Printf formatting directive %d is being passed to Println. - fmt.Println("%d"+` â¡ x (mod 2)`+"\n", x%2) -- - -
- The garbage collector now includes non-heap sources of garbage collector work
- (e.g., stack scanning) when determining how frequently to run. As a result,
- garbage collector overhead is more predictable when these sources are
- significant. For most applications these changes will be negligible; however,
- some Go applications may now use less memory and spend more time on garbage
- collection, or vice versa, than before. The intended workaround is to tweak
- GOGC
where necessary.
-
- The runtime now returns memory to the operating system more efficiently and has - been tuned to work more aggressively as a result. -
- -
- Go 1.17 generally improved the formatting of arguments in stack traces,
- but could print inaccurate values for arguments passed in registers.
- This is improved in Go 1.18 by printing a question mark (?
)
- after each value that may be inaccurate.
-
- The built-in function append
now uses a slightly different formula
- when deciding how much to grow a slice when it must allocate a new underlying array.
- The new formula is less prone to sudden transitions in allocation behavior.
-
- Go 1.17 implemented a new way of passing
- function arguments and results using registers instead of the stack
- on 64-bit x86 architecture on selected operating systems.
- Go 1.18 expands the supported platforms to include 64-bit ARM (GOARCH=arm64
),
- big- and little-endian 64-bit PowerPC (GOARCH=ppc64
, ppc64le
),
- as well as 64-bit x86 architecture (GOARCH=amd64
)
- on all operating systems.
- On 64-bit ARM and 64-bit PowerPC systems, benchmarking shows
- typical performance improvements of 10% or more.
-
- As mentioned in the Go 1.17 release notes, - this change does not affect the functionality of any safe Go code and - is designed to have no impact on most assembly code. See the - Go 1.17 release notes for more details. -
- -- The compiler now can inline functions that contain range loops or - labeled for loops. -
- -
- The new -asan
compiler option supports the
- new go
command -asan
option.
-
- Because the compiler's type checker was replaced in its entirety to - support generics, some error messages now may use different wording - than before. In some cases, pre-Go 1.18 error messages provided more - detail or were phrased in a more helpful way. - We intend to address these cases in Go 1.19. -
- -- Because of changes in the compiler related to supporting generics, the - Go 1.18 compile speed can be roughly 15% slower than the Go 1.17 compile speed. - The execution time of the compiled code is not affected. We - intend to improve the speed of the compiler in Go 1.19. -
- -
- The linker emits far fewer relocations.
- As a result, most codebases will link faster, require less memory to link,
- and generate smaller binaries.
- Tools that process Go binaries should use Go 1.18's debug/gosym
package
- to transparently handle both old and new binaries.
-
- The new -asan
linker option supports the
- new go
command -asan
option.
-
-When building a Go release from source and GOROOT_BOOTSTRAP
-is not set, previous versions of Go looked for a Go 1.4 or later bootstrap toolchain
-in the directory $HOME/go1.4
(%HOMEDRIVE%%HOMEPATH%\go1.4
on Windows).
-Go now looks first for $HOME/go1.17
or $HOME/sdk/go1.17
-before falling back to $HOME/go1.4
.
-We intend for Go 1.19 to require Go 1.17 or later for bootstrap,
-and this change should make the transition smoother.
-For more details, see go.dev/issue/44505.
-
debug/buildinfo
package
- The new debug/buildinfo
package
- provides access to module versions, version control information, and build
- flags embedded in executable files built by the go
command.
- The same information is also available via
- runtime/debug.ReadBuildInfo
- for the currently running binary and via go
- version
-m
on the command line.
-
net/netip
package
- The new net/netip
- package defines a new IP address type, Addr
.
- Compared to the existing
- net.IP
type, the netip.Addr
type takes less
- memory, is immutable, and is comparable so it supports ==
- and can be used as a map key.
-
- In addition to Addr
, the package defines
- AddrPort
, representing
- an IP and port, and
- Prefix
, representing
- a network CIDR prefix.
-
- The package also defines several functions to create and examine
- these new types:
- AddrFrom4
,
- AddrFrom16
,
- AddrFromSlice
,
- AddrPortFrom
,
- IPv4Unspecified
,
- IPv6LinkLocalAllNodes
,
- IPv6Unspecified
,
- MustParseAddr
,
- MustParseAddrPort
,
- MustParsePrefix
,
- ParseAddr
,
- ParseAddrPort
,
- ParsePrefix
,
- PrefixFrom
.
-
- The net
package includes new
- methods that parallel existing methods, but
- return netip.AddrPort
instead of the
- heavier-weight net.IP
or
- *net.UDPAddr
types:
- Resolver.LookupNetIP
,
- UDPConn.ReadFromUDPAddrPort
,
- UDPConn.ReadMsgUDPAddrPort
,
- UDPConn.WriteToUDPAddrPort
,
- UDPConn.WriteMsgUDPAddrPort
.
- The new UDPConn
methods support allocation-free I/O.
-
- The net
package also now includes functions and methods
- to convert between the existing
- TCPAddr
/UDPAddr
- types and netip.AddrPort
:
- TCPAddrFromAddrPort
,
- UDPAddrFromAddrPort
,
- TCPAddr.AddrPort
,
- UDPAddr.AddrPort
.
-
- If Config.MinVersion
- is not set, it now defaults to TLS 1.2 for client connections. Any safely
- up-to-date server is expected to support TLS 1.2, and browsers have required
- it since 2020. TLS 1.0 and 1.1 are still supported by setting
- Config.MinVersion
to VersionTLS10
.
- The server-side default is unchanged at TLS 1.0.
-
- The default can be temporarily reverted to TLS 1.0 by setting the
- GODEBUG=tls10default=1
environment variable.
- This option will be removed in Go 1.19.
-
- crypto/x509
will now
- 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 since 2017 and publicly
- trusted Certificate Authorities have not issued SHA-1 certificates since 2015.
-
- This can be temporarily reverted by setting the
- GODEBUG=x509sha1=1
environment variable.
- This option will be removed in Go 1.19.
-
- As always, there are various minor changes and updates to the library, - made with the Go 1 promise of compatibility - in mind. -
- -
- The new 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.
-
- The Reader.Reset
and
- Writer.Reset
methods
- now use the default buffer size when called on objects with a
- nil
buffer.
-
- The new Cut
function
- slices a []byte
around a separator. It can replace
- and simplify many common uses of
- Index
,
- IndexByte
,
- IndexRune
,
- and SplitN
.
-
- Trim
, TrimLeft
,
- and TrimRight
are now allocation free and, especially for
- small ASCII cutsets, up to 10 times faster.
-
- The 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 package.
-
- The P224
,
- P384
, and
- P521
curve
- implementations are now all backed by code generated by the
- addchain and
- 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
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.
-
- The new Conn.NetConn
- method allows access to the underlying
- net.Conn
.
-
- Certificate.Verify
- now uses platform APIs to verify certificate validity on macOS and iOS when it
- is called with a nil
- VerifyOpts.Roots
- or when using the root pool returned from
- SystemCertPool
.
-
- SystemCertPool
- is now available on Windows.
-
- On Windows, macOS, and iOS, when a
- CertPool
returned by
- SystemCertPool
- has additional certificates added to it,
- 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
- is deprecated. On Windows, macOS, and iOS the
- CertPool
returned by
- 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.
-
- The StructField
- and BasicType
- structs both now have a DataBitOffset
field, which
- holds the value of the DW_AT_data_bit_offset
- attribute if present.
-
- The R_PPC64_RELATIVE
- constant has been added.
-
- The File.Symbols - method now returns the new exported error - value ErrNoSymbols - if the file has no symbol section. -
-
- Per the proposal
-
- Additions to go/ast and go/token to support parameterized functions and types
-
- the following additions are made to the go/ast
package:
-
FuncType
- and TypeSpec
- nodes have a new field TypeParams
to hold type parameters, if any.
- IndexListExpr
- represents index expressions with multiple indices, used for function and type instantiations
- with more than one explicit type argument.
-
- The new Kind.String
- method returns a human-readable name for the receiver kind.
-
- The new constant TILDE
- represents the ~
token per the proposal
-
- Additions to go/ast and go/token to support parameterized functions and types
- .
-
- The new Config.GoVersion
- field sets the accepted Go language version.
-
- Per the proposal
-
- Additions to go/types to support type parameters
-
- the following additions are made to the go/types
package:
-
TypeParam
, factory function
- NewTypeParam
,
- and associated methods are added to represent a type parameter.
- TypeParamList
holds a list of
- type parameters.
- TypeList
holds a list of types.
- NewSignatureType
allocates a
- Signature
with
- (receiver or function) type parameters.
- To access those type parameters, the Signature
type has two new methods
- Signature.RecvTypeParams
and
- Signature.TypeParams
.
- Named
types have four new methods:
- Named.Origin
to get the original
- parameterized types of instantiated types,
- Named.TypeArgs
and
- Named.TypeParams
to get the
- type arguments or type parameters of an instantiated or parameterized type, and
- Named.SetTypeParams
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).
- Interface
type has four new methods:
- Interface.IsComparable
and
- Interface.IsMethodSet
to
- query properties of the type set defined by the interface, and
- Interface.MarkImplicit
and
- Interface.IsImplicit
to set
- and test whether the interface is an implicit interface around a type constraint literal.
- Union
and
- Term
, factory functions
- NewUnion
and
- NewTerm
, and associated
- methods are added to represent type sets in interfaces.
- Instantiate
- instantiates a parameterized type.
- Info.Instances
- map records function and type instantiations through the new
- Instance
type.
- ArgumentError
- and associated methods are added to represent an error related to a type argument.
- Context
and factory function
- NewContext
- are added to facilitate sharing of identical type instances
- across type-checked packages, via the new
- Config.Context
- field.
-
- The predicates
- AssignableTo
,
- ConvertibleTo
,
- Implements
,
- Identical
,
- IdenticalIgnoreTags
, and
- 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 AssertableTo
is undefined if the first argument
- is a generalized interface.
-
- 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.
-
- 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.
-
- 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
- and image.RGBA64Image
- interfaces that were added in Go 1.17.
-
- net.Error.Temporary
has been deprecated.
-
- On WebAssembly targets, the Dial
, DialContext
,
- DialTLS
and DialTLSContext
method fields in
- Transport
- will now be correctly used, if specified, for making HTTP requests.
-
- The new
- Cookie.Valid
- method reports whether the cookie is valid.
-
- The new
- MaxBytesHandler
- function creates a Handler
that wraps its
- ResponseWriter
and Request.Body
with a
- MaxBytesReader
.
-
- User.GroupIds
- now uses a Go native implementation when cgo is not available.
-
- The new
- Value.SetIterKey
- and 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.
-
- The new
- Value.UnsafePointer
- method returns the Value's value as an unsafe.Pointer
.
- This allows callers to migrate from Value.UnsafeAddr
- and Value.Pointer
- to eliminate the need to perform uintptr to unsafe.Pointer conversions at the callsite (as unsafe.Pointer rules require).
-
- The new
- MapIter.Reset
- method changes its receiver to iterate over a
- different map. The use of
- MapIter.Reset
- allows allocation-free iteration
- over many maps.
-
- A number of methods (
- Value.CanInt
,
- Value.CanUint
,
- Value.CanFloat
,
- Value.CanComplex
- )
- have been added to
- Value
- to test if a conversion is safe.
-
- Value.FieldByIndexErr
- has been added to avoid the panic that occurs in
- Value.FieldByIndex
- when stepping through a nil pointer to an embedded struct.
-
- reflect.Ptr
and
- reflect.PtrTo
- have been renamed to
- reflect.Pointer
and
- 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.
-
- regexp
- now treats each invalid byte of a UTF-8 string as U+FFFD
.
-
- The BuildInfo
- struct has two new fields, containing additional information
- about how the binary was built:
-
GoVersion
- holds the version of Go used to build the binary.
- Settings
- is a slice of
- BuildSettings
- structs holding key/value pairs describing the build.
- - 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. -
-
- strconv.Unquote
- now rejects Unicode surrogate halves.
-
- The new Cut
function
- slices a string
around a separator. It can replace
- and simplify many common uses of
- Index
,
- IndexByte
,
- IndexRune
,
- and SplitN
.
-
- The new Clone
function copies the input
- string
without the returned cloned string
referencing
- the input string's memory.
-
- Trim
, TrimLeft
,
- and TrimRight
are now allocation free and, especially for
- small ASCII cutsets, up to 10 times faster.
-
- The 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 package.
-
- The new methods
- Mutex.TryLock
,
- RWMutex.TryLock
, and
- RWMutex.TryRLock
,
- will acquire the lock if it is not currently held.
-
- The new function SyscallN
- has been introduced for Windows, allowing for calls with arbitrary number
- of arguments. As a result,
- Syscall
,
- Syscall6
,
- Syscall9
,
- Syscall12
,
- Syscall15
, and
- Syscall18
are
- deprecated in favor of SyscallN
.
-
- SysProcAttr.Pdeathsig
- is now supported in FreeBSD.
-
- The Wrapper
interface has been removed.
-
- 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)
.
-
- 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.
-
- The new testing.F
type
- is used by the new fuzzing support described
- above. Tests also now support the command line
- options -test.fuzz
, -test.fuzztime
, and
- -test.fuzzminimizetime
.
-
- 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.
-
- 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.
-
- The package supports the new
- text/template and
- html/template
- {{break}}
command via the new constant
- NodeBreak
- and the new type
- BreakNode
,
- and similarly supports the new {{continue}}
command
- via the new constant
- NodeContinue
- and the new type
- ContinueNode
.
-
- The new AppendRune
function appends the UTF-8
- encoding of a rune
to a []byte
.
-
+ + Go 1.19 is not yet released. These are work-in-progress + release notes. Go 1.19 is expected to be released in August 2022. + +
++ TODO: complete this section +
++ TODO: complete this section, or delete if not needed +
++ TODO: complete this section, or delete if not needed +
++ TODO: complete this section, or delete if not needed +
++ TODO: complete this section, or delete if not needed +
++ TODO: complete this section, or delete if not needed +
++ TODO: complete this section, or delete if not needed +
++ TODO: complete this section +
++ As always, there are various minor changes and updates to the library, + made with the Go 1 promise of compatibility + in mind. +
++ TODO: complete this section +
-- 2.48.1