Go features by version
This is a summary of which major features appeared in which versions of Go.
Go is released every six months. Each major Go release is supported until there are two newer major releases. Critical problems are fixed by issuing minor revisions.
1.23 • 1.22 • 1.21 • 1.20 • 1.19 • 1.18 • 1.17 • 1.16 • 1.15 • 1.14 • 1.13 • 1.12 • 1.11 • 1.10 • 1.9 • 1.8 • 1.7 • 1.6 • 1.5 • 1.4 • 1.3 • 1.2 • 1.1 • 1.0
I also provide links to the proposals (𝗣) and commits (𝗖𝗟) for the features described. Check them out for motivation and implementation details.
1.23 / Aug 2024
For loops can range over iterator functions.
𝗣 61405 • 𝗖𝗟 557835, 584596
New iter
package with iterator types.
𝗣 61897 • 𝗖𝗟 543319, 557836, 565935, 565937, 591096
Slice iterators in the slices
package.
𝗣 61899 • 𝗖𝗟 568477, 595515
Map iterators in the maps
package.
𝗣 61900 • 𝗖𝗟 586716
Timer
s and Ticker
s that are no longer referred to by the program become eligible for garbage collection immediately.
𝗣 61542 • 𝗖𝗟 512355
Avoid stale receives after Timer
s and Ticker
s Stop
/Reset
return.
𝗣 37196 • 𝗖𝗟 568341
New unique
package provides facilities for canonicalizing values.
𝗣 62483 • 𝗖𝗟 574355
Release notes (+ interactive version)
1.22 / Feb 2024
Each iteration of the loop creates new variables to avoid accidental sharing bugs.
𝗣 60078 • 𝗖𝗟 532580
For loops can range over integers.
𝗣 61405 • 𝗖𝗟 510538, 538718
New math/rand/v2
package to work with random numbers.
𝗣 61716 •
𝗖𝗟 502495, 502497, 502498, 502499, 502500, 502505, 502506, 516857
HTTP routing patterns support methods and wildcards.
𝗣 61410 •
𝗖𝗟 526815, 526616, 528355, 530575, 530479, 530481, 530461, 552195
New go/version
package to work with Go versions.
𝗣 62039 • 𝗖𝗟 538895
Release notes (+ interactive version)
1.21 / Aug 2023
New min
and max
built-ins calculate the smallest/largest value among arguments.
𝗣 59488 • 𝗖𝗟 496038, 496257
New clear
built-in deletes all elements from a map or zeroes all elements of a slice.
𝗣 56351 • 𝗖𝗟 448076, 453395, 463075, 481935
New log/slog
package provides structured logging with levels.
𝗣 56345 • 𝗖𝗟 477295, 484096, 486376, 486415, 487855, 508195
New slices
package provides many common operations on slices.
𝗣 45955, 54768, 57348, 57433, 58565, 60091, 60546
𝗖𝗟 467417, 468855, 483175, 496078, 498175, 502955
New maps
package provides several common operations on maps.
𝗣 57436 • 𝗖𝗟 464343
New cmp
package to work with ordered types.
𝗣 59488 • 𝗖𝗟 496356
Profile-guided optimization (PGO) performs optimizations based on run-time profile information.
𝗣 55022
WebAssembly System Interface port.
𝗣 58141
1.20 / Feb 2023
Allow conversion from a slice to an array.
𝗣 46505 • 𝗖𝗟 428938, 430415, 430475
Compare struct values one field at a time, in order of definition.
𝗣 8606 • 𝗖𝗟 237919, 237921
Comparable types may now satisfy comparable
constraints, even if the type arguments are not strictly comparable.
𝗣 56548 • 𝗖𝗟 454575
Allow wrapping multiple errors.
𝗣 53435 • 𝗖𝗟 432898
A way to cancel a context.Context
with a given error ("cause").
𝗣 51365 • 𝗖𝗟 375977
New international-friendly time
format strings.
𝗣 52746 • 𝗖𝗟 412495
New crypto/ecdh
package provides support for Elliptic Curve Diffie-Hellman protocol.
𝗣 52221, 56052 • 𝗖𝗟 398914, 450335
The go
command now disables cgo
by default on systems without a C toolchain.
𝗖𝗟 496356
1.19 / Aug 2022
Revised memory model.
𝗣 50859
Soft memory limit on the total amount of memory Go uses.
𝗣 48409 • 𝗖𝗟 397018
Limit total GC CPU utilization to 50%, excluding idle time.
𝗖𝗟 353989
New atomic types in the sync/atomic
package.
𝗣 50860 • 𝗖𝗟 381317
Support for links, lists, and clearer headings in doc comments.
𝗣 51082
1.18 / Mar 2022
Generic programming using type parameters.
𝗣 43651, 45346
New debug/buildinfo
package provides access to module versions and build flags embedded in executable files.
𝗣 39301 • 𝗖𝗟 353887
New net/netip
package defines a better IP address type and helper functions.
𝗣 46518 • 𝗖𝗟 339309
go get
no longer builds or installs packages.
𝗣 43684
Fuzzing.
𝗣 44551
1.17 / Aug 2021
Allow conversion from a slice to an array pointer.
𝗣 395 • 𝗖𝗟 216424
The runtime/cgo
package provides centralized facility for managing (c)go pointer handles.
𝗣 37033 • 𝗖𝗟 295369
Bug-resistant build constraints using the go:build
directive.
𝗣 41184
1.16 / Feb 2021
Embed files into the executable using the go:embed
directive.
𝗣 41191 • 𝗖𝗟 243940, 243941, 243942, 243944, 243945, 243945
New runtime/metrics
package introduces a stable interface for reading implementation-defined metrics from the Go runtime.
𝗣 37112 • 𝗖𝗟 247040, 247041, 247043, 247044, 247045, 247046, 247047, 247049
New io/fs
package provides file system interfaces.
𝗣 41190 • 𝗖𝗟 243908
The io/ioutil
package is deprecated.
𝗣 42026
Module-aware mode is enabled by default (GO111MODULE=on
).
𝗣 41330
Build commands like go build
no longer modify go.mod
and go.sum
by default.
𝗣 40728
1.15 / Aug 2020
New time/tzdata
package embeds the timezone database into a program.
𝗣 38017 • 𝗖𝗟 228101
1.14 / Feb 2020
Allow embedding overlapping interfaces.
𝗣 6977 • 𝗖𝗟 187519, 191257, 214240, 217134
Goroutines are now asynchronously preemptible.
𝗣 24543 • 𝗖𝗟 201760, 201762
New hash/maphash
package provides hash functions on byte sequences.
𝗣 28322 • 𝗖𝗟 186877
1.13 / Sep 2019
Uniform and modernized set of number literal prefixes.
𝗣 19308
Permit signed integer values as shift count.
𝗣 19113
Error wrapping.
𝗣 29934 • 𝗖𝗟 163558, 176998
New crypto/ed25519
package implements the Ed25519 signature scheme.
𝗣 25355 • 𝗖𝗟 174945, 182698
1.12 / Feb 2019
Maps are printed in key-sorted order.
𝗣 21095 • 𝗖𝗟 142737
1.11 / Aug 2018
Modules as a way to manages dependencies.
WebAssembly port.
1.10 / Feb 2018
go build
maintains a cache of recently built packages.
go test
caches test results and automatically runs go vet
.
1.9 / Aug 2017
Type aliases.
𝗣 18130
Monotonic clock in the time
package.
𝗣 12914 • 𝗖𝗟 36255
New math/bits
package for manipulating bits.
𝗣 18616 • 𝗖𝗟 36315
Concurrent map in the sync
package.
𝗣 18177 • 𝗖𝗟 36617
Test helper functions in the testing
package.
𝗣 4899 • 𝗖𝗟 38796
Parallel compilation.
1.8 / Feb 2017
Ignore tags when converting a value from one struct type to another.
𝗣 16085 • 𝗖𝗟 30169, 30190, 30191
The garbage collector no longer considers arguments live throughout the entirety of a function.
𝗣 15843
Slice-related functions in the sort
package.
𝗣 16721 • 𝗖𝗟 27321, 30088
Send HTTP/2 server pushes in the net/http
package.
HTTP server graceful shutdown in the net/http
package.
𝗣 4674 • 𝗖𝗟 32329
Context support in the database/sql
package.
1.7 / Aug 2016
New context
package to work with deadlines and cancellation.
𝗣 14660 • 𝗖𝗟 20346, 20347
New net/http/httptrace
package for tracing events within HTTP requests.
𝗣 12580 • 𝗖𝗟 22191
Sub-tests and sub-benchmarks in the testing
package.
𝗖𝗟 18895, 18896
1.6 / Feb 2016
HTTP/2 support in the net/http
package.
Vendoring.
1.5 / Aug 2015
Compiler and runtime are completely written in Go.
Concurrent garbage collector.
GOMAXPROCS
is set to the number of available cores by default.
Internal packages.
go tool trace
command for fine-grained tracing of program execution.
go doc
command for building package documentation.
1.4 / Dec 2014
For-range loop without variables.
Disallow method calls on **T
.
go generate
command for generating source code before compilation.
1.3 / Jun 2014
Contiguous goroutine stacks.
1.2 / Dec 2013
Any expression that explicitly or implicitly requires evaluation of a nil
address is an error.
Full slice expression to specify both capacity and length when slicing.
New encoding
package provides a set of standard encoding interfaces to build custom marshalers and unmarshalers.
New image/color/palette
package provides standard color palettes.
Indexing operation in the fmt
formatting specifications.
1.1 / May 2013
Integer division by zero is a compile-time error.
Method values.
Race detector.
New go/format
package provides a way for to access the formatting capabilities of the go fmt
command.
New net/http/cookiejar
package provides the basics for managing HTTP cookies.
1.0 / Mar 2012
The first stable release.
Inspired by What's in which Python.
★ Subscribe to keep up with new posts.