DRAFT RELEASE NOTES - Introduction to Go 1.12

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.

The latest Go release, version 1.12, arrives six months after Go 1.11. Most of its changes are in TODO. As always, the release maintains the Go 1 promise of compatibility. We expect almost all Go programs to continue to compile and run as before.

Changes to the language

There are no changes to the language specification.

Ports

FreeBSD

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+.

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.

Tools

Build cache requirement

The build cache is now required as a step toward eliminating $GOPATH/pkg. Setting the environment variable GOCACHE=off to disable the build cache has no effect in Go 1.12.

Godoc

In Go 1.12, godoc no longer has a command-line interface and is only a web server. Users should use go doc for command-line help output instead.

Core library

All of the changes to the standard library are minor.

Minor changes to the library

As always, there are various minor changes and updates to the library, made with the Go 1 promise of compatibility in mind.

build

TODO: https://golang.org/cl/61511: support frame-pointer for arm64

bytes, strings

TODO: https://golang.org/cl/137855: add ReplaceAll

TODO: https://golang.org/cl/145098: fix Reader.UnreadRune returning without error on a zero Reader

crypto/tls, net/http

TODO: https://golang.org/cl/143177: reject HTTP requests to HTTPS server

expvar

TODO: https://golang.org/cl/139537: add Map.Delete

fmt

TODO: https://golang.org/cl/142737: print maps in key-sorted order

go/build, cmd/go

TODO: https://golang.org/cl/146023: add "hurd" as a GOOS value

go/doc

TODO: https://golang.org/cl/140958: add new mode bit PreserveAST to control clearing of data in AST

godoc, cmd/godoc

TODO: https://golang.org/cl/141397: remove CLI support

image

TODO: https://golang.org/cl/118755: make RegisterFormat safe for concurrent use

image/png

TODO: https://golang.org/cl/134235: pack image data for small bitdepth paletted images

internal/poll

TODO: https://golang.org/cl/130676: use F_FULLFSYNC fcntl for FD.Fsync on OS X

io

TODO: https://golang.org/cl/139457: export StringWriter

math/bits

TODO: https://golang.org/cl/123157: add extended precision Add, Sub, Mul, Div

net

TODO: https://golang.org/cl/113997: use splice(2) on Linux when reading from UnixConn, rework splice tests

net/http

TODO: https://golang.org/cl/130115: add Client.CloseIdleConnections

TODO: https://golang.org/cl/145398: in Transport, don't error on non-chunked response with Trailer header

os

TODO: https://golang.org/cl/125443: add ExitCode method to ProcessState

TODO: https://golang.org/cl/135075: add ModeCharDevice to ModeType

TODO: https://golang.org/cl/139418: add UserHomeDir

reflect

TODO: https://golang.org/cl/33572: add Value.MapRange method and MapIter type

runtime

TODO: https://golang.org/cl/135395: use MADV_FREE on Linux if available

strings

TODO: https://golang.org/cl/122835: add Builder.Cap

syscall

TODO: https://golang.org/cl/125456: implement Unix Socket for Windows

TODO: https://golang.org/cl/138595: FreeBSD 12 ino64 support

syscall/js

TODO: https://golang.org/cl/141644: add Wrapper interface to support external Value wrapper types

TODO: https://golang.org/cl/143137: make zero js.Value represent "undefined"

TODO: https://golang.org/cl/144384: add the Value.Truthy method

testing

TODO: https://golang.org/cl/139258: implement -benchtime=100x