The Go Blog

Twelve Years of Go

Russ Cox, for the Go team
10 November 2021

Today we celebrate the twelfth birthday of the Go open source release. We have had an eventful year and have a lot to look forward to next year.

The most visible change here on the blog is our new home on go.dev, part of consolidating all our Go web sites into a single, coherent site. Another part of that consolidation was replacing godoc.org with pkg.go.dev.

In February, the Go 1.16 release added macOS ARM64 support, added a file system interface and embedded files, and enabled modules by default, along with the usual assortment of improvements and optimizations.

In August, the Go 1.17 release added Windows ARM64 support, made TLS cipher suite decisions easier and more secure, introduced pruned module graphs to make modules even more efficient in large projects, and added new, more readable build constraint syntax. Under the hood, Go 1.17 also switched to a register-based calling convention for Go functions on x86-64, improving performance in CPU-bound applications by 5–15%.

Over the course of the year, we published many new tutorials, a guide to databases in Go, a guide to developing modules, and a Go modules reference. One highlight is the new tutorial “Developing a RESTful API with Go and Gin”, which is also available in interactive form using Google Cloud Shell.

We’ve been busy on the IDE side, enabling gopls by default in VS Code Go and delivering countless improvements to both gopls and VS Code Go, including a powerful debugging experience powered by Delve.

We also launched the Go fuzzing beta and officially proposed adding generics to Go, both of which are now expected in Go 1.18.

Continuing to adapt to “virtual-first”, the Go team hosted our second annual Go day at Google Open Source Live. You can watch the talks on YouTube:

Going Forward

We’re incredibly excited about what’s in store for Go’s 13th year. Next month, we will have two talks at GopherCon 2021, along with many talented speakers from across the Go community. Register for free and mark your calendars!

  • “Why and How to Use Go Generics”, by Robert Griesemer and Ian Lance Taylor, who led the design and implementation of this new feature.
    Dec 8, 11:00 AM (US Eastern).

  • “Debugging Go Code Using the Debug Adapter Protocol (DAP)”, by Suzy Mueller, show how to use VS Code Go’s advanced debugging features with Delve.
    Dec 9, 3:20 PM (US Eastern).

In February, the Go 1.18 release will expand the new register-based calling convention to non-x86 architectures, bringing dramatic performance improvements with it. It will include the new Go fuzzing support. And it will be the first release to include support for generics.

Generics will be one of our focuses for 2022. The initial release in Go 1.18 is only the beginning. We need to spend time using generics and learning what works and what doesn’t, so that we can write best practices and decide what should be added to the standard library and other libraries. We expect that Go 1.19 (expected in August 2022) and later releases will further refine the design and implementation of generics as well as integrating them further into the overall Go experience.

Another focus for 2022 is supply chain security. We have been talking for years about the problems of dependencies. The design of Go modules provides reproducible, verifiable, verified builds, but there is still more work to be done. Starting in Go 1.18, the go command will embed more information in binaries about their build configurations, both to make reproducibility easier and to help projects that need to generate an SBOM for Go binaries. We have also started work on a Go vulnerability database and an associated tool to report vulnerabilities in a program’s dependencies. One of our goals in this work is to significantly improve the signal-to-noise ratio of this kind of tool: if a program doesn’t use the vulnerable function, we don’t want to report that. Over the course of 2022 we plan to make this available as a standalone tool but also to add it to existing tooling, including gopls and VS Code Go, and to pkg.go.dev. There is also more to do to improve other aspects of Go’s supply chain security posture. Stay tuned for details.

Overall, we expect 2022 to be an eventful year for Go, and we will continue to deliver the timely releases and improvements you’ve come to expect.

Thank You!

Go is far more than just us on the Go team at Google. Thank you for your help making Go a success and joining us on this adventure. We hope you are all staying safe and wish you all the best.

Next article: Go 1.18 Beta 1 is available, with generics
Previous article: A new search experience on pkg.go.dev
Blog Index