2019-04-30 11:46:02 -06:00
<!-- {
"Title": "Go 1.13 Release Notes",
"Path": "/doc/go1.13",
"Template": true
}-->
<!--
NOTE: In this document and others in this directory, the convention is to
set fixed-width phrases with non-fixed-width spaces, as in
< code > hello< / code > < code > world< / code > .
Do not send CLs removing the interior tags from such phrases.
-->
< style >
ul li { margin: 0.5em 0; }
< / style >
< h2 id = "introduction" > DRAFT RELEASE NOTES - Introduction to Go 1.13< / h2 >
< p >
< strong >
Go 1.13 is not yet released. These are work-in-progress
release notes. Go 1.13 is expected to be released in August 2019.
< / strong >
< / p >
2019-06-11 13:12:54 -06:00
< p >
As of Go 1.13, the go command downloads and authenticates modules using
the Go module mirror and Go checksum database run by Google. See
< a href = "https://proxy.golang.org/privacy" > https://proxy.golang.org/privacy< / a >
for privacy information about these services and the
< a href = "/cmd/go/#hdr-Module_downloading_and_verification" > go command documentation< / a >
for configuration details.
< / p >
2019-04-30 11:46:02 -06:00
< p >
TODO
< / p >
< h2 id = "language" > Changes to the language< / h2 >
< p >
TODO
< / p >
< h2 id = "ports" > Ports< / h2 >
< p >
TODO
< / p >
< h3 id = "darwin" > Darwin< / h3 >
< p >
As < a href = "go1.12#darwin" > announced< / a > in the Go 1.12 release notes,
Go 1.13 now requires macOS 10.11 El Capitan or later;
support for previous versions has been discontinued.
< / p >
< h3 id = "freebsd" > FreeBSD< / h3 >
< p >
As < a href = "go1.12#freebsd" > announced< / a > in the Go 1.12 release notes,
Go 1.13 now requires FreeBSD 11.2 or later;
support for previous versions has been discontinued.
FreeBSD 12.0 or later requires a kernel with the COMPAT_FREEBSD11 option set (this is the default).
< / p >
< h2 id = "tools" > Tools< / h2 >
< p >
TODO
< / p >
< h2 id = "runtime" > Runtime< / h2 >
< p >
TODO
< / p >
< h2 id = "library" > Core library< / h2 >
< p >
TODO generally
< / p >
< h3 id = "tls_1_3" > TLS 1.3< / h3 >
< p >
TODO; link to < a href = "/doc/go1.12#tls_1_3" > Go 1.12 notes< / a > .
< / p >
< h3 id = "minor_library_changes" > Minor changes to the library< / h3 >
< p >
As always, there are various minor changes and updates to the library,
made with the Go 1 < a href = "/doc/go1compat" > promise of compatibility< / a >
in mind.
< / p >
< p >
TODO
< / p >
2019-06-05 09:45:01 -06:00
<!-- CL 161904: https://golang.org/cl/161904: cmd/compile: do not export float or complex constants with - asmhdr -->
<!-- CL 167780: https://golang.org/cl/167780: cmd/compile: rename init function from init.ializers back to init -->
<!-- CL 170448: https://golang.org/cl/170448: cmd/compile: enable - newescape by default -->
<!-- CL 174125: https://golang.org/cl/174125: cmd/dist: add support for openbsd/arm64 -->
<!-- CL 177797: https://golang.org/cl/177797: cmd/doc: always print package clause except for commands -->
<!-- CL 173345: https://golang.org/cl/173345: cmd/go: add - trimpath build flag -->
<!-- CL 173438: https://golang.org/cl/173438: cmd/go: change - tags to a comma - separated list -->
<!-- CL 175983: https://golang.org/cl/175983: cmd/go: set the "generate" build tag in go generate, per design doc -->
<!-- CL 167747: https://golang.org/cl/167747: 'go get' in module mode now supports the version suffix '@patch'.: cmd/go/internal/modget: support the suffix '@patch' in 'go get' -->
< dl id = "all" > < dt > < a href = "/pkg/all/" > all< / a > < / dt >
< dd >
< p > <!-- CL 174457 -->
TODO: < a href = "https://golang.org/cl/174457" > https://golang.org/cl/174457< / a > : add new GOOS=illumos, split out of GOOS=solaris
< / p >
< / dl > <!-- all -->
< dl id = "bytes" > < dt > < a href = "/pkg/bytes/" > bytes< / a > < / dt >
< dd >
< p > <!-- CL 161760 -->
TODO: < a href = "https://golang.org/cl/161760" > https://golang.org/cl/161760< / a > : hoist error creation out of function
< / p >
2019-06-11 16:09:10 -06:00
< p >
The new < a href = "/pkg/bytes/#ToValidUTF8" > < code > ToValidUTF8< / code > < / a > function returns a
copy of a given byte slice with each run of invalid UTF-8 byte sequences replaced by a given slice.
< / p >
2019-06-05 09:45:01 -06:00
< / dl > <!-- bytes -->
< dl id = "context" > < dt > < a href = "/pkg/context/" > context< / a > < / dt >
< dd >
< p > <!-- CL 169080 -->
TODO: < a href = "https://golang.org/cl/169080" > https://golang.org/cl/169080< / a > : don' t depend on fmt
< / p >
< / dl > <!-- context -->
< dl id = "crypto/ed25519" > < dt > < a href = "/pkg/crypto/ed25519/" > crypto/ed25519< / a > < / dt >
< dd >
< p > <!-- CL 174945 -->
TODO: < a href = "https://golang.org/cl/174945" > https://golang.org/cl/174945< / a > : promote from golang.org/x/crypto/ed25519
< / p >
< / dl > <!-- crypto/ed25519 -->
< dl id = "crypto/tls" > < dt > < a href = "/pkg/crypto/tls/" > crypto/tls< / a > < / dt >
< dd >
< p > <!-- CL 177698 -->
TODO: < a href = "https://golang.org/cl/177698" > https://golang.org/cl/177698< / a > : add support for Ed25519 certificates in TLS 1.2 and 1.3
< / p >
< / dl > <!-- crypto/tls -->
< dl id = "database/sql" > < dt > < a href = "/pkg/database/sql/" > database/sql< / a > < / dt >
< dd >
< p > <!-- CL 170699 -->
2019-06-12 10:51:22 -06:00
The new < a href = "/pkg/database/sql/#NullTime" > < code > NullTime< / code > < / a > type represents a < code > time.Time< / code > that may be null.
2019-06-05 09:45:01 -06:00
< / p >
< p > <!-- CL 174178 -->
2019-06-12 10:51:22 -06:00
The new < a href = "/pkg/database/sql/#NullInt32" > < code > NullInt32< / code > < / a > type represents an < code > int32< / code > that may be null.
2019-06-05 09:45:01 -06:00
< / p >
< / dl > <!-- database/sql -->
< dl id = "debug/dwarf" > < dt > < a href = "/pkg/debug/dwarf/" > debug/dwarf< / a > < / dt >
< dd >
< p > <!-- CL 158797 -->
TODO: < a href = "https://golang.org/cl/158797" > https://golang.org/cl/158797< / a > : more graceful handling of unsupported types
< / p >
< / dl > <!-- debug/dwarf -->
< dl id = "html/template" > < dt > < a href = "/pkg/html/template/" > html/template< / a > < / dt >
< dd >
< p > <!-- CL 175218 -->
2019-06-12 11:11:03 -06:00
When using a < code > < script> < / code > tag with "module" set as the
type attribute, code will now be interperted as < a href = "https://html.spec.whatwg.org/multipage/scripting.html#the-script-element:module-script-2" > JavaScript module script< / a > .
2019-06-05 09:45:01 -06:00
< / p >
< / dl > <!-- html/template -->
< dl id = "log" > < dt > < a href = "/pkg/log/" > log< / a > < / dt >
< dd >
< p > <!-- CL 168920 -->
TODO: < a href = "https://golang.org/cl/168920" > https://golang.org/cl/168920< / a > : expose Writer() method of the standard logger
< / p >
< / dl > <!-- log -->
< dl id = "math/big" > < dt > < a href = "/pkg/math/big/" > math/big< / a > < / dt >
< dd >
< p > <!-- CL 160682 -->
TODO: < a href = "https://golang.org/cl/160682" > https://golang.org/cl/160682< / a > : implement Rat.SetUint64
< / p >
< p > <!-- CL 168237 -->
TODO: < a href = "https://golang.org/cl/168237" > https://golang.org/cl/168237< / a > : accept non-decimal floats with Rat.SetString
< / p >
< / dl > <!-- math/big -->
< dl id = "math/bits" > < dt > < a href = "/pkg/math/bits/" > math/bits< / a > < / dt >
< dd >
< p > <!-- CL 178177 -->
TODO: < a href = "https://golang.org/cl/178177" > https://golang.org/cl/178177< / a > : document that Add, Sub, Mul, RotateLeft, ReverseBytes are constant time
< / p >
< / dl > <!-- math/bits -->
< dl id = "net" > < dt > < a href = "/pkg/net/" > net< / a > < / dt >
< dd >
< p > <!-- CL 156366 -->
TODO: < a href = "https://golang.org/cl/156366" > https://golang.org/cl/156366< / a > : use DNS over TCP when use-vc is set in resolv.conf
< / p >
< p > <!-- CL 166297 -->
TODO: < a href = "https://golang.org/cl/166297" > https://golang.org/cl/166297< / a > : use libSystem bindings for DNS resolution on macos if cgo is unavailable
< / p >
< p > <!-- CL 170678 -->
TODO: < a href = "https://golang.org/cl/170678" > https://golang.org/cl/170678< / a > : add KeepAlive field to ListenConfig
< / p >
< / dl > <!-- net -->
< dl id = "net/http" > < dt > < a href = "/pkg/net/http/" > net/http< / a > < / dt >
< dd >
< p > <!-- CL 130256 -->
2019-06-10 11:44:56 -06:00
The new field < a href = "/pkg/net/http/#Transport.ForceAttemptHTTP2" > < code > Transport.ForceAttemptHTTP2< / code > < / a >
controls whether HTTP/2 is enabled when a non-zero < code > Dial< / code > , < code > DialTLS< / code > , or < code > DialContext< / code >
func or < code > TLSClientConfig< / code > is provided.
2019-06-05 09:45:01 -06:00
< / p >
< p > <!-- CL 140357 -->
2019-06-10 11:44:56 -06:00
When reusing HTTP/2, the < a href = "/pkg/net/http#Transport" > < code > Transport< / code > < / a > no longer performs unnecessary TLS handshakes.
2019-06-05 09:45:01 -06:00
< / p >
< p > <!-- CL 154383 -->
2019-06-10 11:44:56 -06:00
< a href = "/pkg/net/http/#TimeoutHandler" > < code > TimeoutHandler< / code > < / a > 's
< a href = "/pkg/net/http/#ResponseWriter" > < code > ResponseWriter< / code > < / a > now implements the
< a href = "/pkg/net/http/#Pusher" > < code > Pusher< / code > < / a > and < a href = "/pkg/net/http/#Flusher" > < code > Flusher< / code > < / a > interfaces.
2019-06-05 09:45:01 -06:00
< / p >
< p > <!-- CL 167681 -->
2019-06-10 11:44:56 -06:00
The new < a href = "/pkg/net/http#Server" > < code > Server< / code > < / a > fields
< a href = "/pkg/net/http/#Server.BaseContext" > < code > BaseContext< / code > < / a > and
< a href = "/pkg/net/http/#Server.ConnContext" > < code > ConnContext< / code > < / a >
allow finer control over the < a href = "/pkg/context#Context" > < code > Context< / code > < / a > values provided to requests and connections.
2019-06-05 09:45:01 -06:00
< / p >
< p > <!-- CL 173658 -->
2019-06-10 11:44:56 -06:00
The new < a href = "/pkg/net/http/#Header" > < code > Header< / code > < / a > method
< a href = "/pkg/net/http/#Header.Clone" > < code > Clone< / code > < / a > returns a copy of the receiver.
2019-06-05 09:45:01 -06:00
< / p >
< / dl > <!-- net/http -->
< dl id = "os" > < dt > < a href = "/pkg/os/" > os< / a > < / dt >
< dd >
2019-06-12 12:59:23 -06:00
< p > <!-- CL 160877 -->
The new < a href = "/pkg/os/#UserConfigDir" > < code > UserConfigDir< / code > < / a > function
returns the default directory to use for user-specific configuration data.
< / p >
2019-06-05 09:45:01 -06:00
< p > <!-- CL 166578 -->
2019-06-10 15:37:34 -06:00
If a < a href = "/pkg/os/#File" > < code > File< / code > < / a > is opened using the O_APPEND flag, its
< a href = "/pkg/os/#File.WriteAt" > < code > WriteAt< / code > < / a > method will always return an error.
2019-06-05 09:45:01 -06:00
< / p >
< / dl > <!-- os -->
< dl id = "os/exec" > < dt > < a href = "/pkg/os/exec/" > os/exec< / a > < / dt >
< dd >
< p > <!-- CL 174318 -->
2019-06-10 15:37:34 -06:00
On Windows, the environment for a < a href = "/pkg/os/exec#Cmd" > < code > Cmd< / code > < / a > always inherits the
< code > %SYSTEMROOT%< / code > value of the parent process unless the
< a href = "/pkg/os/exec#Cmd.Env" > < code > Cmd.Env< / code > < / a > field includes an explicit value for it.
2019-06-05 09:45:01 -06:00
< / p >
< / dl > <!-- os/exec -->
< dl id = "reflect" > < dt > < a href = "/pkg/reflect/" > reflect< / a > < / dt >
< dd >
< p > <!-- CL 171337 -->
TODO: < a href = "https://golang.org/cl/171337" > https://golang.org/cl/171337< / a > : add Value.IsZero
< / p >
< p > <!-- CL 174531 -->
TODO: < a href = "https://golang.org/cl/174531" > https://golang.org/cl/174531< / a > : MakeFunc: allow assignment conversions on values returned from the wrapped function
< / p >
< / dl > <!-- reflect -->
< dl id = "runtime" > < dt > < a href = "/pkg/runtime/" > runtime< / a > < / dt >
< dd >
< p > <!-- CL 170318 -->
TODO: < a href = "https://golang.org/cl/170318" > https://golang.org/cl/170318< / a > : randomize package initialization order in race mode
< / p >
< / dl > <!-- runtime -->
< dl id = "runtime, internal/poll, net" > < dt > < a href = "/pkg/runtime, internal/poll, net/" > runtime, internal/poll, net< / a > < / dt >
< dd >
< p > <!-- CL 166497 -->
TODO: < a href = "https://golang.org/cl/166497" > https://golang.org/cl/166497< / a > : report event scanning error on read event
< / p >
< / dl > <!-- runtime, internal/poll, net -->
< dl id = "runtime/cgo" > < dt > < a href = "/pkg/runtime/cgo/" > runtime/cgo< / a > < / dt >
< dd >
< p > <!-- CL 170127 -->
TODO: < a href = "https://golang.org/cl/170127" > https://golang.org/cl/170127< / a > : look for android_get_device_api_level in libc.so
< / p >
< / dl > <!-- runtime/cgo -->
2019-06-11 16:09:10 -06:00
< dl id = "strings" > < dt > < a href = "/pkg/strings" > strings< / a > < / dt >
2019-06-05 09:45:01 -06:00
< dd >
< p > <!-- CL 142003 -->
2019-06-11 16:09:10 -06:00
The new < a href = "/pkg/strings/#ToValidUTF8" > < code > ToValidUTF8< / code > < / a > function returns a
copy of a given string with each run of invalid UTF-8 byte sequences replaced by a given string.
2019-06-05 09:45:01 -06:00
< / p >
2019-06-11 16:09:10 -06:00
< / dl > <!-- strings -->
2019-06-05 09:45:01 -06:00
< dl id = "sync" > < dt > < a href = "/pkg/sync/" > sync< / a > < / dt >
< dd >
< p > <!-- CL 166960 -->
2019-06-11 13:12:54 -06:00
Large < a href = "/pkg/sync/#Pool" > < code > sync.Pool< / code > < / a > no longer increase stop-the-world pause times.
2019-06-05 09:45:01 -06:00
< / p >
< p > <!-- CL 166961 -->
2019-06-11 13:12:54 -06:00
< code > Pool< / code > 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 < code > Pool< / code > .
2019-06-05 09:45:01 -06:00
< / p >
< / dl > <!-- sync -->
< dl id = "syscall" > < dt > < a href = "/pkg/syscall/" > syscall< / a > < / dt >
< dd >
< p > <!-- CL 168479 -->
TODO: < a href = "https://golang.org/cl/168479" > https://golang.org/cl/168479< / a > : avoid _getdirentries64 on darwin
< / p >
< p > <!-- CL 174197 -->
TODO: < a href = "https://golang.org/cl/174197" > https://golang.org/cl/174197< / a > : allow setting security attributes on processes
< / p >
< p > <!-- CL 174320 -->
TODO: < a href = "https://golang.org/cl/174320" > https://golang.org/cl/174320< / a > : don' t return EINVAL on zero Chmod mode on Windows
< / p >
< / dl > <!-- syscall -->
< dl id = "syscall/js" > < dt > < a href = "/pkg/syscall/js/" > syscall/js< / a > < / dt >
< dd >
< p > <!-- CL 177537 -->
TODO: < a href = "https://golang.org/cl/177537" > https://golang.org/cl/177537< / a > : replace TypedArrayOf with CopyBytesToGo/CopyBytesToJS
< / p >
< / dl > <!-- syscall/js -->
< dl id = "testing" > < dt > < a href = "/pkg/testing/" > testing< / a > < / dt >
< dd >
< p > <!-- CL 112155 -->
TODO: < a href = "https://golang.org/cl/112155" > https://golang.org/cl/112155< / a > : stop rounding b.N
< / p >
< p > <!-- CL 166717 -->
TODO: < a href = "https://golang.org/cl/166717" > https://golang.org/cl/166717< / a > : add B.ReportMetric for custom benchmark metrics
< / p >
< p > <!-- CL 173722 -->
TODO: < a href = "https://golang.org/cl/173722" > https://golang.org/cl/173722< / a > : delay flag registration; move to an Init function
< / p >
< / dl > <!-- testing -->
< dl id = "text/scanner" > < dt > < a href = "/pkg/text/scanner/" > text/scanner< / a > < / dt >
< dd >
< p > <!-- CL 163079 -->
2019-06-12 16:04:00 -06:00
The new < a href = "/pkg/text/scanner/#AllowNumberbars" > < code > AllowNumberbars< / code > < / a >
mode allows number literals to contain underbars as digit separators.
2019-06-05 09:45:01 -06:00
< / p >
< / dl > <!-- text/scanner -->
< dl id = "text/template" > < dt > < a href = "/pkg/text/template/" > text/template< / a > < / dt >
< dd >
< p > <!-- CL 161762 -->
2019-06-12 16:04:00 -06:00
The new < a href = "/pkg/text/template/#hdr-Functions" > slice function< / a >
returns the result of slicing its first argument by the following arguments.
2019-06-05 09:45:01 -06:00
< / p >
< / dl > <!-- text/template -->
< dl id = "time" > < dt > < a href = "/pkg/time/" > time< / a > < / dt >
< dd >
< p > <!-- CL 122876 -->
2019-06-11 16:09:10 -06:00
Day-of-year is now supported by < a href = "/pkg/time/#time.Format" > < code > Format< / code > < / a >
and < a href = "/pkg/time/#Parse" > < code > Parse< / code > < / a > .
2019-06-05 09:45:01 -06:00
< / p >
< p > <!-- CL 167387 -->
2019-06-11 16:09:10 -06:00
The new < a href = "/pkg/time/#Duration" > < code > Duration< / code > < / a > methods
< a href = "/pkg/time/#Duration.Microseconds" > < code > Microseconds< / code > < / a > and
< a href = "/pkg/time/#Duration.Milliseconds" > < code > Milliseconds< / code > < / a > return
the duration as an integer count of their respectively named units.
2019-06-05 09:45:01 -06:00
< / p >
< / dl > <!-- time -->