August 24, 2018
Go 1.11 makes no language changes but adds experimental module support (an alternative to GOPATH with versioning) and an experimental WebAssembly port. It also removes the runtime's heap size limit, improves debug info and compiler optimizations, and drops support for older macOS/Windows/OpenBSD versions.
Experimental module support added as an alternative to GOPATH, with integrated versioning and reproducible builds (go command).
New experimental WebAssembly port (GOOS=js, GOARCH=wasm) letting Go compile to a single ~2MB wasm module; new syscall/js package for JS interop.
GOARCH values riscv and riscv64 reserved for future RISC-V support (already usable via Gccgo).
Minimum OS versions raised: OpenBSD 6.2+, macOS 10.10+, Windows 7+ required; support for older versions removed; OpenBSD 6.4 now supported.
Race detector now works on linux/ppc64le and (with known issues) netbsd/amd64; memory sanitizer added for linux/arm64; c-shared/c-archive build modes added for freebsd/amd64.
Runtime now uses a sparse heap layout, removing the previous 512GiB heap size limit and fixing address-space conflicts in mixed Go/C or -race binaries.
Compiler generates significantly more accurate debug info for optimized (non -N -l) binaries; DWARF sections are now compressed by default (can disable via -ldflags=-compressdwarf=false).
Compiler does more aggressive inlining (including functions calling panic) and stronger bounds-check/branch elimination using transitive and arithmetic relations.
go test now defaults -memprofile to the new allocs profile, and (since 1.10) runs go vet first, so tests that fail type-checking (e.g. unused vars in closures) now fail.
go vet now hard-fails when a package doesn't typecheck and better detects mistakes in custom printf-style wrapper functions.
New GOFLAGS environment variable lets users set default flags for the go command (e.g., default -mod=vendor or -ldflags=-w).
go run now accepts a single import path or directory, enabling shortcuts like go run . or go run pkg.