Go 1.21 has been released! For past releases, I wrote up my notes on what’s new in Go 1.18 (part 1, part 2), 1.19, and 1.20 (part 1, part 2, part 3), but I thought I would sit this round of blogging out, in part because there have been some good roundups of what’s new elsewhere already, and in part because I’ve been on family vacation until recently and haven’t had time to write much. However, I didn’t want to let 1.21 go totally by without talking about what I contributed, because if I don’t talk up my own contributions, who else will?
Ten years ago, I wrote Go: The Good, the Bad, and the Meh. Way back in 2013, it made it to the front page of Hacker News and got over 400 comments on /r/programming. I don’t have analytics from back then, but I suspect it’s one of my more discussed pieces of writing, and it was definitely one of my first experiences of getting a lot of feedback for my writing. (Then again, I don’t have any evidence of whether John Carmack read it, so maybe it’s not the one for my obituary.)
Anyway, it’s been a decade, and in that time I’ve gone from playing around with Go as an amateur to being a professional programmer and using Go as one of my core languages. So, I thought it would be fun to look back at what I got right, what’s changed since I wrote it, what I missed, and what I got wrong. Feel free to read or re-read the original post, or just stick to my reflections here without digging back into it. Just know that as its title suggests, I wrote it with three sections for what I thought was “good”, “bad”, and “meh” about Go at that time.
Note for anyone submitting this post to social media, the quotation marks in the title are load bearing. Do not remove them.
TL;DR: Just import github.com/carlmjohnson/versioninfo and use
versioninfo.Revision to automatically include a Git hash in your Go application.
Curious how it works? Want to make your own version info package? Read on.
Go 1.20 was released on February 1, 2023. That means it’s time for the final part of this three part look at What’s New in Go 1.20. In this part, we’ll look at some of the relatively minor changes to the standard library.
Before we begin, here are two changes I won’t write about because someone else did. The first is the new context.WithCancelCause API. Joseph Woodward wrote a great summary of the issue, so please read that.
Second, Filippo Valsorda wrote a complete look at Go 1.20 cryptography changes, including the new crypto/ecdh package. So, check that out for more details on those changes, including the secret crypto/internal/bigmod package 🤫.
In the first part of What’s New in Go 1.20, we looked at language changes. For part two, I would like to introduce three changes to the standard library that address problems that the community has been thinking about and debating solutions to for years.
Update: Want to listen to a podcast about Go 1.20 instead of reading a blog post? Check out Go Time episode 267.
Well, it’s that time once again. It’s time for a new release of the Go programming language. Go 1.18 in Q1 of 2022 was a major release that featured the long awaited addition of generics to the language and also had lots of minor features and quality of life improvements. Go 1.19 in Q3 of 2022 was a comparatively subdued release. Now it’s 2023, and it’s time for Go 1.20. The release candidates have been released, and the final release is just around the corner. The Go team have already posted the draft release notes.
Edit: Go 1.20 was released Feb. 1, 2023.
In my view, the impact of Go 1.20 is somewhere in between 1.18 and 1.19, with more features and solutions to longstanding problems than 1.19, but nothing on the scale of adding generics to the language in 1.18. Still, I’m going to break up my look at “What’s New in Go 1.20” into a planned series of three blog posts. First, I’ll write about the language changes in Go 1.20 (below), and in the next post, I write about the major changes to the standard library, and finally there is a last post about some of my favorite minor additions to the standard library.