Go: Windows Gets an Upgrade and Maps Get a Makeover
Today's episode dives into 20 commits that show Go's attention to both performance and platform support. The biggest stories are Jake Bailey's experimental map optimization that could boost cache performance, and Jason Donenfeld's Windows modernization that finally brings Go binaries up to Windows 10 standards.
Duration: PT3M55S
Transcript
Hey there, Go enthusiasts! Welcome back to another episode of the Go podcast. I'm your host, and it's March 25th, 2026. Grab your coffee because we've got some fascinating changes to talk about today.
So we had a quieter day on the merged PR front - zero merged today - but don't let that fool you! We've got 20 commits that are absolutely packed with interesting improvements and some really thoughtful engineering decisions. Sometimes the best work happens in these focused commit sessions where the team is iterating and refining.
Let me start with what I think is the most technically exciting change today. Jake Bailey has been working on something that could fundamentally improve how Go handles maps. He's introduced a new experimental feature called GOEXPERIMENT=mapsplitgroup that changes how map data is laid out in memory.
Here's the story: right now, Go's Swiss maps store key-value pairs together in slots. But Jake realized this wastes space, especially for maps like map[string]struct{} where the empty struct gets padded. His solution? Split the layout so all the keys are grouped together, then all the values. Think of it like reorganizing your bookshelf - instead of keeping each author's biography next to their novel, you put all the biographies on one shelf and all the novels on another.
The brilliant part is that this should give us better cache performance because when you're scanning through keys - which happens a lot during lookups - they're all sitting right next to each other in memory. Your CPU's cache will love this! Jake mentions it's an alternative to another approach and he suspects this one will perform better. I love seeing these kinds of performance experiments in the wild.
Now, speaking of exciting changes, Jason Donenfeld tackled something that's been overdue for a while. He finally updated Go's Windows PE headers to properly target Windows 10. This might sound boring, but it's actually pretty important!
See, Go has required Windows 10 for a few releases now, but the executable headers were still claiming to be compatible with older versions. This meant Windows would apply compatibility hacks that we don't want, and older systems might try to run Go programs and crash in undefined ways. Jason's fix properly tells Windows "hey, we're a Windows 10 program" and handles all the security cookie requirements that come with that. It's the kind of change that makes everything work more predictably.
Cherry Mui made some great improvements to FIPS mode handling in the compiler, ensuring string literals work consistently across different compilation paths. This is exactly the kind of attention to detail that makes Go reliable in security-critical environments.
We also saw some nice cleanup work - Damien Neil removed a reference to a package that doesn't exist anymore and relaxed URL validation to be more practical for real-world use cases. Sometimes the best improvements are about removing unnecessary complexity.
And there were several runtime improvements, including work by qmuntal that simplifies how syscalls handle error codes on Darwin, and various test fixes that keep our quality bar high.
What I love about today's commits is how they show Go's maturity. We're seeing performance experiments, platform modernization, practical fixes for real-world use cases, and careful attention to edge cases. This is what sustainable language development looks like.
For today's focus, if you're interested in map performance, definitely keep an eye on that GOEXPERIMENT=mapsplitgroup feature. Try it out in your benchmarks and see how it affects your workloads. And if you're deploying Go applications on Windows, Jason's changes should make your binaries play nicer with the operating system.
That's a wrap for today! Tomorrow we'll see what new changes land in the Go ecosystem. Keep coding, keep experimenting, and remember - every commit is a step forward. Until next time!