#​556 — June 4, 2025

Unsub  |  Web Version

🖊️ I was meant to be travelling this week. My plans changed, but I’d already planned for a shorter issue, so it’s a quicker one this time. Back to full service next week!
__
Peter Cooper, your editor

Together with  Fairwinds

Go Weekly

“For the foreseeable future, the Go team will stop pursuing syntactic language changes for error handling. We will also close all open and incoming proposals that concern themselves primarily with the syntax of error handling, without further investigation.”

___
Robert Griesemer and the Go team

[ On | No ] Syntactic Support for Error Handling — The topic of handling errors in Go, and if it’s possible to improve the syntax around doing so, has been raised many times over the years, but sometimes it’s worth drawing a line under things and to focus elsewhere. Robert explains the matter, some of the proposals made over the years, and the benefits of maintaining the status quo.

Robert Griesemer

The Guide to In-House Vs Managed Kubernetes-As-A-Service — Struggling with the “build vs. buy” decision when it comes to Kubernetes infrastructure management? You're not alone! Download the guide to discover the pros and cons of each approach as we break down the associated costs, risks & ROI. Get it today!

Fairwinds sponsor

Pure vs. Impure Iterators in Go — Go 1.23 introduced custom iterators, but the standard ‘single-use’ vs. not classification can be confusing. This post proposes a clearer pure vs. impure distinction, with concrete examples and performance insights.

Julien Cretel

IN BRIEF:

Three Cool slog.Logger Tricks — Make slog.Logger sing with a few smart, composable logging patterns.

Joeson Huang

Simpler Backoff — Exponential backoff algorithms can be complex and difficult to reason about, or you can use a lookup table to make it trivial.

Josh Bleecher Snyder

📄 The Perils of Pointers in the Land of the Zero-Sized TypePointergeist is definitely my favorite word of the day. Fillmore Labs

📺 Making a Game in Go with No Experience – Interesting to see someone totally new to Go leap in and use Ebitengine to produce results quickly. Goodgis

📄 Let's Write a JSON Parser from Scratch Sushant Dhiman

📄 Cross-Compiling C and Go via cgo with Bazel Uros Popovic

🛠 Code & Tools

Bob 0.35: SQL Query Builder and ORM/Factory Generator — Though v0.36 and v0.37 have come out in just the past few days, v0.35 was a big milestone for Bob as it enabled the creation of code for SELECT, INSERT, UPDATE and DELETE queries for Postgres, MySQL and SQLite. Numerous other improvements demand you give it another look too, though – some examples here.

Stephen Afam-Osemene

💡 You might also find Bob vs GORM a useful comparison (there are also comparisons with Ent, SQLBoiler, and Jet over on the left).

franz-go: A Complete Apache Kafka Client Library — A library that “aims to provide every Kafka feature from Apache Kafka v0.8.0 onward” and certainly has a striking featureset.

Travis Bischel

httpgrace: A net/http Wrapper with Graceful Shutdown — Rather than call http.ListenAndServe, the idea is you can call httpgrace.ListenAndServe and get graceful shutdown baked in.

Enrico Candino

  • MCP Go 0.31 – An implementation of the Model Context Protocol (MCP).

  • Revive 1.10 – Fast, configurable, extensible, flexible linter for Go.

  • dae 1.0 – High-performance eBPF-based transparent proxy.

  • FrankenPHP 1.7 – Modern Go-powered PHP app server.

  • Air 1.62 – Live reload for Go apps.

  • pdfcpu 0.11 – Go PDF processor.

⭐ A golden oldie..

go-binsize-treemap: Render a Visualization of Go Executable Space Usage — Easier to look at than explain in writing! It’s a tool that generates an SVG treemap of how the space inside a Go-built executable is used. Even when it's not useful, it's fun to look at.

Nikolay Dubina