2018-10-31 10:03:15 -06:00
<!-- {
"Title": "Go 1.12 Release Notes",
"Path": "/doc/go1.12",
"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.12< / h2 >
< p >
< strong >
Go 1.12 is not yet released. These are work-in-progress
release notes. Go 1.12 is expected to be released in February 2019.
< / strong >
< / p >
< p >
The latest Go release, version 1.12, arrives six months after < a href = "go1.11" > Go 1.11< / a > .
Most of its changes are in TODO.
As always, the release maintains the Go 1 < a href = "/doc/go1compat.html" > promise of compatibility< / a > .
We expect almost all Go programs to continue to compile and run as before.
< / p >
< h2 id = "language" > Changes to the language< / h2 >
< p >
There are no changes to the language specification.
< / p >
2018-11-18 06:52:22 -07:00
< h2 id = "ports" > Ports< / h2 >
< h3 id = "freebsd" > FreeBSD< / h3 >
< p >
Go 1.12 is the last release that is supported on FreeBSD 10.x, which has
already reached end-of-life. Go 1.13 will require FreeBSD 11.2+ or FreeBSD
12.0+.
< / p >
2018-11-28 08:17:40 -07:00
< h3 id = "darwin" > Darwin< / h3 >
< p >
2018-11-27 18:09:58 -07:00
Go 1.12 is the last release that will run on macOS 10.10 Yosemite.
Go 1.13 will require macOS 10.11 El Capitan or later.
< / p >
2018-10-31 10:03:15 -06:00
< h2 id = "tools" > Tools< / h2 >
2018-12-03 15:58:38 -07:00
< h3 id = "vet" > < code > go tool vet< / code > no longer supported< / h3 >
< p >
The < code > go vet< / code > command has been rewritten to serve as the
base for a range of different source code analysis tools. See
the < a href = "https://godoc.org/golang.org/x/tools/go/analysis" > golang.org/x/tools/go/analysis< / a >
package for details. A side-effect is that < code > go tool vet< / code >
is no longer supported. External tools that use < code > go tool
vet< / code > must be changed to use < code > go
vet< / code > . Using < code > go vet< / code > instead of < code > go tool
vet< / code > should work with all supported versions of Go.
< / p >
2018-10-31 10:03:15 -06:00
< h3 id = "gocache" > Build cache requirement< / h3 >
< p >
The build cache is now required as a step toward eliminating
< code > $GOPATH/pkg< / code > . Setting the environment variable
< code > GOCACHE=off< / code > to disable the
< a href = "/cmd/go/#hdr-Build_and_test_caching" > build cache< / a >
has no effect in Go 1.12.
< / p >
2018-11-29 10:47:11 -07:00
< h3 id = "compiler" > Compiler toolchain< / h3 >
< p > <!-- CL 134155, 134156 -->
The compiler's live variable analysis has improved. This may mean that
finalizers will be executed sooner in this release than in previous
releases. If that is a problem, consider the appropriate addition of a
< a href = "/pkg/runtime/#KeepAlive" > < code > runtime.KeepAlive< / code > < / a > call.
< / p >
< p > <!-- CL 147361 -->
More functions are now eligible for inlining by default, including
functions that do nothing but call another function.
This extra inlining makes it additionally important to use
< a href = "/pkg/runtime/#CallersFrames" > < code > runtime.CallersFrames< / code > < / a >
instead of iterating over the result of
< a href = "/pkg/runtime/#Callers" > < code > runtime.Callers< / code > < / a > directly.
< pre >
// Old code which no longer works correctly (it will miss inlined call frames).
var pcs [10]uintptr
n := runtime.Callers(1, pcs[:])
for _, pc := range pcs[:n] {
f := runtime.FuncForPC(pc)
if f != nil {
fmt.Println(f.Name())
}
}
< / pre >
< pre >
// New code which will work correctly.
var pcs [10]uintptr
n := runtime.Callers(1, pcs[:])
frames := runtime.CallersFrames(pcs[:n])
for {
frame, more := frames.Next()
fmt.Println(frame.Function)
if !more {
break
}
}
< / pre >
< / p >
2018-10-31 10:03:15 -06:00
< h3 id = "godoc" > Godoc< / h3 >
< p >
In Go 1.12, < code > godoc< / code > no longer has a command-line interface and
is only a web server. Users should use < code > go< / code > < code > doc< / code >
for command-line help output instead.
< / p >
< h2 id = "library" > Core library< / h2 >
< p >
All of the changes to the standard library are minor.
< / 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 >
2018-11-28 09:35:39 -07:00
<!-- CL 147218: https://golang.org/cl/147218: cmd/asm: rename R18 to R18_PLATFORM on ARM64 -->
<!-- CL 116275: https://golang.org/cl/116275: cmd/compile: avoid string allocations when map key is struct or array literal -->
2018-10-31 10:03:15 -06:00
<!-- CL 142717: https://golang.org/cl/142717: cmd/compile: remove obsolete "safe" mode -->
<!-- CL 144340: https://golang.org/cl/144340: cmd/compile: add - lang flag to specify language version -->
2018-11-28 09:35:39 -07:00
<!-- CL 146058: https://golang.org/cl/146058: It is invalid to convert a nil unsafe.Pointer to uintptr and back, with arithmetic.: cmd/compile: assume unsafe pointer arithmetic generates non - nil results -->
2018-10-31 10:03:15 -06:00
<!-- CL 141977: https://golang.org/cl/141977: cmd/doc: add - all flag to print all documentation for package -->
<!-- CL 126656: https://golang.org/cl/126656: cmd/go: add $GOFLAGS environment variable -->
2018-11-28 09:35:39 -07:00
<!-- CL 147282: https://golang.org/cl/147282: cmd/go: add go mod edit - go flag -->
2018-12-04 08:49:27 -07:00
<!-- CL 148517: https://golang.org/cl/148517: cmd/go: enable module mode without a main module when GO111MODULE=on -->
2018-11-28 09:35:39 -07:00
<!-- CL 146898: https://golang.org/cl/146898: cmd/link, runtime: add initial cgo support for ppc64 -->
<!-- CL 60790: https://golang.org/cl/60790: The trace tool now supports plotting mutator utilization curves, including cross - references to the execution trace. These are useful for analyzing the impact of the garbage collector on application latency and throughput.: cmd/trace: add minimum mutator utilization (MMU) plot -->
2018-10-31 10:03:15 -06:00
<!-- CL 115677: https://golang.org/cl/115677: cmd/vet: check embedded field tags too -->
2018-11-28 09:35:39 -07:00
< dl id = "bufio" > < dt > < a href = "/pkg/bufio/" > bufio< / a > < / dt >
< dd >
< p > <!-- CL 149297 -->
TODO: < a href = "https://golang.org/cl/149297" > https://golang.org/cl/149297< / a > : make Reader.Peek invalidate Unreads
< / p >
< / dl > <!-- bufio -->
2018-10-31 10:03:15 -06:00
< dl id = "build" > < dt > < a href = "/pkg/build/" > build< / a > < / dt >
< dd >
< p > <!-- CL 61511 -->
TODO: < a href = "https://golang.org/cl/61511" > https://golang.org/cl/61511< / a > : support frame-pointer for arm64
< / p >
< / dl > <!-- build -->
2018-12-04 14:22:26 -07:00
< dl id = "bytes" > < dt > < a href = "/pkg/bytes/" > bytes< / a > < / dt >
2018-10-31 10:03:15 -06:00
< dd >
< p > <!-- CL 137855 -->
2018-12-04 14:22:26 -07:00
The new function < a href = "/pkg/bytes/#ReplaceAll" > < code > ReplaceAll< / code > < / a > returns a copy of
a byte slice with all non-overlapping instances of a value replaced by another.
2018-10-31 10:03:15 -06:00
< / p >
< p > <!-- CL 145098 -->
2018-12-04 14:22:26 -07:00
A pointer to a zero-value < a href = "/pkg/bytes/#Reader" > < code > Reader< / code > < / a > is now
functionally equivalent to < a href = "/pkg/bytes/#NewReader" > < code > NewReader< / code > < / a > < code > (nil)< / code > .
Prior to Go 1.12, the former could not be used as a substitute for the latter in all cases.
2018-10-31 10:03:15 -06:00
< / p >
2018-12-04 14:22:26 -07:00
< / dl > <!-- bytes -->
2018-10-31 10:03:15 -06:00
2018-11-28 09:35:39 -07:00
< dl id = "cmd,runtime" > < dt > < a href = "/pkg/cmd,runtime/" > cmd,runtime< / a > < / dt >
< dd >
< p > <!-- CL 138675 -->
TODO: < a href = "https://golang.org/cl/138675" > https://golang.org/cl/138675< / a > : enable race detector on arm64
< / p >
< / dl > <!-- cmd,runtime -->
< dl id = "crypto/rand" > < dt > < a href = "/pkg/crypto/rand/" > crypto/rand< / a > < / dt >
< dd >
< p > <!-- CL 120055 -->
TODO: < a href = "https://golang.org/cl/120055" > https://golang.org/cl/120055< / a > : use the new getrandom syscall on FreeBSD
< / p >
< p > <!-- CL 139419 -->
TODO: < a href = "https://golang.org/cl/139419" > https://golang.org/cl/139419< / a > : warn to stderr if blocked 60+ sec on first Reader.Read call
< / p >
< / dl > <!-- crypto/rand -->
< dl id = "crypto/rc4" > < dt > < a href = "/pkg/crypto/rc4/" > crypto/rc4< / a > < / dt >
< dd >
< p > <!-- CL 130397 -->
TODO: < a href = "https://golang.org/cl/130397" > https://golang.org/cl/130397< / a > : remove assembler implementations
< / p >
< / dl > <!-- crypto/rc4 -->
< dl id = "database/sql" > < dt > < a href = "/pkg/database/sql/" > database/sql< / a > < / dt >
< dd >
< p > <!-- CL 145738 -->
2018-12-04 14:22:26 -07:00
A query cursor can now be obtained by passing a
< a href = "/pkg/database/sql/#Rows" > < code > *Rows< / code > < / a >
value to the < a href = "/pkg/database/sql/#Row.Scan" > < code > Row.Scan< / code > < / a > method.
2018-11-28 09:35:39 -07:00
< / p >
< / dl > <!-- database/sql -->
2018-10-31 10:03:15 -06:00
< dl id = "expvar" > < dt > < a href = "/pkg/expvar/" > expvar< / a > < / dt >
< dd >
< p > <!-- CL 139537 -->
2018-12-04 14:22:26 -07:00
The new < a href = "/pkg/expvar/#Map.Delete" > < code > Delete< / code > < / a > method allows
for deletion of key/value pairs from a < a href = "/pkg/expvar/#Map" > < code > Map< / code > < / a > .
2018-10-31 10:03:15 -06:00
< / p >
< / dl > <!-- expvar -->
< dl id = "fmt" > < dt > < a href = "/pkg/fmt/" > fmt< / a > < / dt >
< dd >
2018-12-04 14:22:26 -07:00
< p > <!-- CL 142737 -->
Maps are now printed in key-sorted order to ease testing. The ordering rules are:
< ul >
< li > When applicable, nil compares low
< li > ints, floats, and strings order by <
< li > NaN compares less than non-NaN floats
< li > bool compares false before true
< li > Complex compares real, then imaginary
< li > Pointers compare by machine address
< li > Channel values compare by machine address
< li > Structs compare each field in turn
< li > Arrays compare each element in turn
< li > Interface values compare first by < code > reflect.Type< / code > describing the concrete type
and then by concrete value as described in the previous rules.
< / ul >
2018-11-28 09:35:39 -07:00
< / p >
2018-12-04 14:22:26 -07:00
< p > <!-- CL 129777 -->
When printing maps, non-reflexive key values like < code > NaN< / code > were previously
displayed as < code > < nil> < / code > . As of this release, the correct values are printed.
2018-10-31 10:03:15 -06:00
< / p >
< / dl > <!-- fmt -->
< dl id = "go/build, cmd/go" > < dt > < a href = "/pkg/go/build, cmd/go/" > go/build, cmd/go< / a > < / dt >
< dd >
< p > <!-- CL 146023 -->
TODO: < a href = "https://golang.org/cl/146023" > https://golang.org/cl/146023< / a > : add " hurd" as a GOOS value
< / p >
< / dl > <!-- go/build, cmd/go -->
< dl id = "go/doc" > < dt > < a href = "/pkg/go/doc/" > go/doc< / a > < / dt >
< dd >
< p > <!-- CL 140958 -->
TODO: < a href = "https://golang.org/cl/140958" > https://golang.org/cl/140958< / a > : add new mode bit PreserveAST to control clearing of data in AST
< / p >
< / dl > <!-- go/doc -->
2018-11-28 09:35:39 -07:00
< dl id = "go/token" > < dt > < a href = "/pkg/go/token/" > go/token< / a > < / dt >
< dd >
< p > <!-- CL 134075 -->
TODO: < a href = "https://golang.org/cl/134075" > https://golang.org/cl/134075< / a > : add (*File).LineStart, which returns Pos for a given line
< / p >
< / dl > <!-- go/token -->
2018-10-31 10:03:15 -06:00
< dl id = "godoc, cmd/godoc" > < dt > < a href = "/pkg/godoc, cmd/godoc/" > godoc, cmd/godoc< / a > < / dt >
< dd >
< p > <!-- CL 141397 -->
TODO: < a href = "https://golang.org/cl/141397" > https://golang.org/cl/141397< / a > : remove CLI support
< / p >
< / dl > <!-- godoc, cmd/godoc -->
< dl id = "image" > < dt > < a href = "/pkg/image/" > image< / a > < / dt >
< dd >
< p > <!-- CL 118755 -->
TODO: < a href = "https://golang.org/cl/118755" > https://golang.org/cl/118755< / a > : make RegisterFormat safe for concurrent use
< / p >
< / dl > <!-- image -->
< dl id = "image/png" > < dt > < a href = "/pkg/image/png/" > image/png< / a > < / dt >
< dd >
< p > <!-- CL 134235 -->
TODO: < a href = "https://golang.org/cl/134235" > https://golang.org/cl/134235< / a > : pack image data for small bitdepth paletted images
< / p >
< / dl > <!-- image/png -->
2018-11-28 09:35:39 -07:00
< dl id = "internal/cpu" > < dt > < a href = "/pkg/internal/cpu/" > internal/cpu< / a > < / dt >
< dd >
< p > <!-- CL 149578 -->
TODO: < a href = "https://golang.org/cl/149578" > https://golang.org/cl/149578< / a > : move GODEBUGCPU options into GODEBUG
< / p >
< / dl > <!-- internal/cpu -->
2018-10-31 10:03:15 -06:00
< dl id = "internal/poll" > < dt > < a href = "/pkg/internal/poll/" > internal/poll< / a > < / dt >
< dd >
< p > <!-- CL 130676 -->
TODO: < a href = "https://golang.org/cl/130676" > https://golang.org/cl/130676< / a > : use F_FULLFSYNC fcntl for FD.Fsync on OS X
< / p >
< / dl > <!-- internal/poll -->
< dl id = "io" > < dt > < a href = "/pkg/io/" > io< / a > < / dt >
< dd >
< p > <!-- CL 139457 -->
TODO: < a href = "https://golang.org/cl/139457" > https://golang.org/cl/139457< / a > : export StringWriter
< / p >
< / dl > <!-- io -->
2018-11-28 09:35:39 -07:00
< dl id = "lib/time" > < dt > < a href = "/pkg/lib/time/" > lib/time< / a > < / dt >
< dd >
< p > <!-- CL 151299 -->
TODO: < a href = "https://golang.org/cl/151299" > https://golang.org/cl/151299< / a > : update tzdata to 2018g
< / p >
< / dl > <!-- lib/time -->
2018-10-31 10:03:15 -06:00
< dl id = "math/bits" > < dt > < a href = "/pkg/math/bits/" > math/bits< / a > < / dt >
< dd >
< p > <!-- CL 123157 -->
TODO: < a href = "https://golang.org/cl/123157" > https://golang.org/cl/123157< / a > : add extended precision Add, Sub, Mul, Div
< / p >
< / dl > <!-- math/bits -->
< dl id = "net" > < dt > < a href = "/pkg/net/" > net< / a > < / dt >
< dd >
2018-11-28 09:35:39 -07:00
< p > <!-- CL 146659 -->
2018-12-04 12:31:52 -07:00
The
< a href = "/pkg/net/#Dialer.DualStack" > < code > Dialer.DualStack< / code > < / a > setting is now ignored and deprecated;
RFC 6555 Fast Fallback ("Happy Eyeballs") is now enabled by default. To disable, set
< a href = "/pkg/net/#Dialer.FallbackDelay" > < code > Dialer.FallbackDelay< / code > < / a > to a negative value.
2018-11-28 09:35:39 -07:00
< / p >
2018-12-04 08:49:27 -07:00
< p > <!-- CL 107196 -->
2018-12-04 12:31:52 -07:00
Similarly, TCP keep-alives are now enabled by default if
< a href = "/pkg/net/#Dialer.KeepAlive" > < code > Dialer.KeepAlive< / code > < / a > is zero.
To disable, set it to a negative value.
2018-12-04 08:49:27 -07:00
< / p >
2018-12-04 12:31:52 -07:00
< p > <!-- CL 113997 -->
On Linux, the < a href = "http://man7.org/linux/man-pages/man2/splice.2.html" > < code > splice< / code > system call< / a > is now used when copying from a
< a href = "/pkg/net/#UnixConn" > < code > UnixConn< / code > < / a > to a
< a href = "/pkg/net/#TCPConn" > < code > TCPConn< / code > < / a > .
< / p >
2018-10-31 10:03:15 -06:00
< / dl > <!-- net -->
< dl id = "net/http" > < dt > < a href = "/pkg/net/http/" > net/http< / a > < / dt >
< dd >
2018-12-04 12:31:52 -07:00
< p > <!-- CL 143177 -->
The HTTP server now rejects misdirected HTTP requests to HTTPS servers with a plaintext "400 Bad Request" response.
< / p >
2018-10-31 10:03:15 -06:00
< p > <!-- CL 130115 -->
2018-12-04 12:31:52 -07:00
The new < a href = "/pkg/net/http/#Client.CloseIdleConnections" > < code > Client.CloseIdleConnections< / code > < / a >
method calls the < code > Client< / code > 's underlying < code > Transport< / code > 's < code > CloseIdleConnections< / code >
if it has one.
2018-10-31 10:03:15 -06:00
< / p >
< p > <!-- CL 145398 -->
2018-12-04 12:31:52 -07:00
The < a href = "/pkg/net/http/#Transport" > < code > Transport< / code > < / a > no longer rejects HTTP responses which declare
HTTP Trailers but don't use chunked encoding. Instead, the declared trailers are now just ignored.
2018-10-31 10:03:15 -06:00
< / p >
2018-12-04 12:31:52 -07:00
< p > <!-- CL 152080 --> <!-- CL 151857 -->
The < a href = "/pkg/net/http/#Transport" > < code > Transport< / code > < / a > no longer handles < code > MAX_CONCURRENT_STREAMS< / code > 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 < code > MAX_CONCURRENT_STREAMS< / code > requests
active and then new TCP connections are created as needed. In Go 1.10 and Go 1.11 the < code > http2< / code > package
would block and wait for requests to finish instead of creating new connections.
To get the stricter behavior back, import the
< a href = "https://godoc.org/golang.org/x/net/http2" > < code > golang.org/x/net/http2< / code > < / a > package
directly and set
< a href = "https://godoc.org/golang.org/x/net/http2#Transport.StrictMaxConcurrentStreams" > < code > Transport.StrictMaxConcurrentStreams< / code > < / a > to
< code > true< / code > .
2018-12-04 08:49:27 -07:00
< / p >
2018-10-31 10:03:15 -06:00
< / dl > <!-- net/http -->
2018-11-28 09:35:39 -07:00
< dl id = "net/http/httputil" > < dt > < a href = "/pkg/net/http/httputil/" > net/http/httputil< / a > < / dt >
< dd >
< p > <!-- CL 146437 -->
2018-12-04 12:31:52 -07:00
The < a href = "/pkg/net/http/httputil/#ReverseProxy" > < code > ReverseProxy< / code > < / a > now automatically
proxies WebSocket requests.
2018-11-28 09:35:39 -07:00
< / p >
< / dl > <!-- net/http/httputil -->
2018-10-31 10:03:15 -06:00
< dl id = "os" > < dt > < a href = "/pkg/os/" > os< / a > < / dt >
< dd >
< p > <!-- CL 125443 -->
2018-12-04 12:31:52 -07:00
The new < a href = "/pkg/os/#ProcessState.ExitCode" > < code > ProcessState.ExitCode< / code > < / a > method
returns the process's exit code.
2018-10-31 10:03:15 -06:00
< / p >
< p > <!-- CL 135075 -->
TODO: < a href = "https://golang.org/cl/135075" > https://golang.org/cl/135075< / a > : add ModeCharDevice to ModeType
< / p >
< p > <!-- CL 139418 -->
TODO: < a href = "https://golang.org/cl/139418" > https://golang.org/cl/139418< / a > : add UserHomeDir
< / p >
2018-11-28 09:35:39 -07:00
< p > <!-- CL 146020 -->
TODO: < a href = "https://golang.org/cl/146020" > https://golang.org/cl/146020< / a > : add support for long path names on unix RemoveAll
< / p >
2018-10-31 10:03:15 -06:00
< / dl > <!-- os -->
2018-11-28 09:35:39 -07:00
< dl id = "path/filepath" > < dt > < a href = "/pkg/path/filepath/" > path/filepath< / a > < / dt >
< dd >
< p > <!-- CL 145220 -->
TODO: < a href = "https://golang.org/cl/145220" > https://golang.org/cl/145220< / a > : change IsAbs(" NUL" ) to return true
< / p >
< / dl > <!-- path/filepath -->
2018-10-31 10:03:15 -06:00
< dl id = "reflect" > < dt > < a href = "/pkg/reflect/" > reflect< / a > < / dt >
< dd >
< p > <!-- CL 33572 -->
TODO: < a href = "https://golang.org/cl/33572" > https://golang.org/cl/33572< / a > : add Value.MapRange method and MapIter type
< / p >
< / dl > <!-- reflect -->
2018-11-28 09:35:39 -07:00
< dl id = "regexp" > < dt > < a href = "/pkg/regexp/" > regexp< / a > < / dt >
< dd >
< p > <!-- CL 139783 -->
TODO: < a href = "https://golang.org/cl/139783" > https://golang.org/cl/139783< / a > : add DeepEqual test
< / p >
< p > <!-- CL 139784 -->
TODO: < a href = "https://golang.org/cl/139784" > https://golang.org/cl/139784< / a > : add partial Deprecation comment to Copy
< / p >
< / dl > <!-- regexp -->
2018-10-31 10:03:15 -06:00
< dl id = "runtime" > < dt > < a href = "/pkg/runtime/" > runtime< / a > < / dt >
< dd >
< p > <!-- CL 135395 -->
TODO: < a href = "https://golang.org/cl/135395" > https://golang.org/cl/135395< / a > : use MADV_FREE on Linux if available
< / p >
< / dl > <!-- runtime -->
2018-11-28 09:35:39 -07:00
< dl id = "runtime/debug" > < dt > < a href = "/pkg/runtime/debug/" > runtime/debug< / a > < / dt >
< dd >
< p > <!-- CL 144220 -->
TODO: < a href = "https://golang.org/cl/144220" > https://golang.org/cl/144220< / a > : add API to read module info in binary
< / p >
< / dl > <!-- runtime/debug -->
2018-10-31 10:03:15 -06:00
< dl id = "strings" > < dt > < a href = "/pkg/strings/" > strings< / a > < / dt >
< dd >
2018-12-04 14:22:26 -07:00
< p > <!-- CL 137855 -->
The new function < a href = "/pkg/strings/#ReplaceAll" > < code > ReplaceAll< / code > < / a > returns a copy of
a string with all non-overlapping instances of a value replaced by another.
< / p >
< p > <!-- CL 145098 -->
A pointer to a zero-value < a href = "/pkg/strings/#Reader" > < code > Reader< / code > < / a > is now
functionally equivalent to < a href = "/pkg/strings/#NewReader" > < code > NewReader< / code > < / a > < code > (nil)< / code > .
Prior to Go 1.12, the former could not be used as a substitute for the latter in all cases.
< / p >
2018-10-31 10:03:15 -06:00
< p > <!-- CL 122835 -->
2018-12-04 12:31:52 -07:00
The new < a href = "/pkg/strings/#Builder.Cap" > < code > Builder.Cap< / code > < / a > method returns the capacity of the builder's underlying byte slice.
2018-10-31 10:03:15 -06:00
< / p >
2018-11-28 09:35:39 -07:00
< p > <!-- CL 131495 -->
TODO: < a href = "https://golang.org/cl/131495" > https://golang.org/cl/131495< / a > : correctly handle invalid utf8 sequences in Map
< / p >
2018-10-31 10:03:15 -06:00
< / dl > <!-- strings -->
< dl id = "syscall" > < dt > < a href = "/pkg/syscall/" > syscall< / a > < / dt >
< dd >
< p > <!-- CL 125456 -->
TODO: < a href = "https://golang.org/cl/125456" > https://golang.org/cl/125456< / a > : implement Unix Socket for Windows
< / p >
< p > <!-- CL 138595 -->
TODO: < a href = "https://golang.org/cl/138595" > https://golang.org/cl/138595< / a > : FreeBSD 12 ino64 support
< / p >
2018-11-28 09:35:39 -07:00
< p > <!-- CL 141639 -->
TODO: < a href = "https://golang.org/cl/141639" > https://golang.org/cl/141639< / a > : implement syscalls on Darwin using libSystem
< / p >
< p > <!-- CL 147117 -->
TODO: < a href = "https://golang.org/cl/147117" > https://golang.org/cl/147117< / a > : add Syscall18 on Windows
< / p >
2018-10-31 10:03:15 -06:00
< / dl > <!-- syscall -->
< dl id = "syscall/js" > < dt > < a href = "/pkg/syscall/js/" > syscall/js< / a > < / dt >
< dd >
< p > <!-- CL 141644 -->
TODO: < a href = "https://golang.org/cl/141644" > https://golang.org/cl/141644< / a > : add Wrapper interface to support external Value wrapper types
< / p >
< p > <!-- CL 143137 -->
TODO: < a href = "https://golang.org/cl/143137" > https://golang.org/cl/143137< / a > : make zero js.Value represent " undefined"
< / p >
< p > <!-- CL 144384 -->
TODO: < a href = "https://golang.org/cl/144384" > https://golang.org/cl/144384< / a > : add the Value.Truthy method
< / p >
< / dl > <!-- syscall/js -->
< dl id = "testing" > < dt > < a href = "/pkg/testing/" > testing< / a > < / dt >
< dd >
2018-11-28 09:35:39 -07:00
< p > <!-- CL 121936 -->
TODO: < a href = "https://golang.org/cl/121936" > https://golang.org/cl/121936< / a > : exit with error if testing.Short is called before flag.Parse
< / p >
2018-10-31 10:03:15 -06:00
< p > <!-- CL 139258 -->
TODO: < a href = "https://golang.org/cl/139258" > https://golang.org/cl/139258< / a > : implement -benchtime=100x
< / p >
< / dl > <!-- testing -->
2018-11-28 09:35:39 -07:00
< dl id = "text/template" > < dt > < a href = "/pkg/text/template/" > text/template< / a > < / dt >
< dd >
< p > <!-- CL 142217 -->
TODO: < a href = "https://golang.org/cl/142217" > https://golang.org/cl/142217< / a > : removed truncation of context in error message
< / p >
< / dl > <!-- text/template -->