Twelve Years of Go
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.
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:
“Using Generics in Go”, by Ian Lance Taylor, introduces generics and how to use them effectively.
“Modern Enterprise Applications”, by Steve Francia, shows how Go plays a role in enterprise modernization.
“Building Better Projects with the Go Editor”, by Suzy Mueller, demonstrates how VS Code Go’s integrated tooling helps you navigate code, debug tests, and more.
“From Proof of Concept to Production”, by Benjamin Cane, a Distinguished Engineer at American Express, explains how American Express came to use Go for its payments and rewards platforms.
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.
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.