← All podcasts
Thumbnail for I am done with Golang

I am done with Golang

The PrimeTime·11:42v1.1

Overview

In this short solo episode, the host — known as ThePrimeagen — reflects on his long history with the Go programming language and explains why recent changes to the language have caused him to fall out of love with it. The episode is a personal technical commentary, prompted by the announcement that Go 1.27 will allow generics on method receivers. It closes with a brief introduction to Odin, a language the host now considers a worthy alternative.

Bottom Line

The episode is a concise, opinionated take on language design philosophy — specifically, the tension between keeping a language simple and expanding its feature set. A listener will come away with a clear understanding of what made Go appealing to a certain kind of developer, what is changing, and why those changes feel significant to that audience. It requires little background knowledge to follow, but offers the most to developers who have used Go or are thinking about language choice for backend or systems work.

Key Themes

What Was Discussed

Go's original appeal The host describes Go as a language that was deliberately constrained. Because there was effectively one way to write anything, codebases were predictable and easy to navigate. It shipped with a standard formatter, a minimal package manager, and a unified build tool. The host valued this because it let him focus on solving the actual problem rather than making language-level decisions.

The change in Go 1.27 The triggering topic is a proposed feature allowing generics on method receivers, something previously restricted to free-form functions. The host demonstrates a simple Result type — holding either a value or an error — which becomes cleaner to write with this new capability. He acknowledges the code looks appealing but argues that introducing this kind of abstraction undermines Go's core promise of uniformity.

Why generics cause problems beyond syntax The host argues that Go's generics implementation is limited in ways that matter. As an example, he notes that writing a generic function that wraps any function with any number of arguments into a Result type is not possible cleanly in Go — you end up writing convertZero, convertOne, convertTwo variants instead. TypeScript, by contrast, handles this case naturally. His point is that Go is gaining the downsides of a rich type system without gaining the full power one.

Error handling as a feature, not a bug The host defends Go's verbose error handling — where each operation that can fail requires an explicit check — as intentional and valuable. He counts the lines in a short example: three lines of logic, seven lines of error handling. While acknowledging the ergonomics are poor, he argues this explicitness is what made Go's codebases trustworthy and consistent. The decision not to add try-catch or Rust-style ? operators was, to him, a principled one.

Iterators, abstraction, and the bigger concern Beyond generics, the host points to the addition of iterators as another step toward hiding costs that Go previously made visible. Taken together — iterators, generics on receivers, potential future additions — he sees Go drifting toward becoming a less capable version of Rust or TypeScript, without the full benefits of either.

Odin as an alternative The host briefly introduces Odin, a C-like language oriented toward games and graphics. He describes it as having directory-level packages, explicit overloading, and clear control over memory allocation. His broader point is that Odin has a defined purpose, much like early Go did, and that this clarity is what he now finds missing from Go.

Notable Points

The method receiver restriction was load-bearing. Restricting generics to free-form functions was not just a technical limitation — it was part of what kept Go codebases structurally similar. Allowing generics on method receivers opens the door to widely divergent design patterns across projects, something the host sees as a significant cultural shift for the language.

Go's limitations were sometimes the point. The host argues that the absence of features like enums or ergonomic error handling was a deliberate trade-off, not an oversight. His concern is not that Go is fixing genuine problems, but that it is solving them in ways that sacrifice the property — uniformity — that made Go worth choosing in the first place.

The "Rust light" criticism. The host's sharpest criticism is that Go is converging toward a position already occupied by better-suited languages. If a developer wants a rich type system, Rust or TypeScript serve that need more completely. Go, in his view, is acquiring the complexity of those languages without their expressive power.

An interview anecdote as illustration. During a Facebook interview, the host was asked how to return multiple values in JavaScript and could not answer, having become so accustomed to Go's native multiple return values that the concept of returning an object or array as a workaround did not register. He uses this to illustrate how deeply Go's model had shaped his thinking.

Worth Listening If…

Skip If…

Read full transcript →Watch on YouTube ↗