---
title: "Russ Cox makes the case for coroutines"
publication: "Go Weekly"
issue: 469
published_at: "2023-07-18"
canonical_url: "https://golangweekly.com/issues/469"
---

Plus Gorilla is back, IBM takes over Sarama, a Go powered TUI feed reader, and Go 1.21rc3. |        

#​469 — July 18, 2023 

[Unsub](https://golangweekly.com/leave/*|UID|*)|[Web Version](https://golangweekly.com/issues/469)  

Together with [![Ardan Labs\](https://res.cloudinary.com/cpress/image/upload/c_fill,g_auto,e_trim,w_250,h_250/e_make_transparent/co_white,e_outline:7/k1tcxqgkxmihmxpsyw2l.png)](https://www.ardanlabs.com/consulting/?utm_source=cooperpress)  

Go Weekly 

[![\](https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/zazdrqbwf8s0f8pzzwvq.jpg)](https://research.swtch.com/coro)  

[A Rationale for Using Coroutines in Go](https://research.swtch.com/coro) — Many of the initial reactions to this suggestion by Russ Cox to introduce coroutines to Go were negative, with folks instead preferring Go’s existing channels based approach for the problems coroutines can solve. Nonetheless, there _are_ some interesting and _specific_ use cases for coroutines in Go, such as when iterating over generic collections, and Russ tries to convince us of their merit here. Luckily, it's all possible _"without language changes"._ 

Russ Cox   

[govulncheck 1.0 Released](https://go.dev/blog/govulncheck) — We featured Go’s new vulnerability management tool last year when Julie Qiu [gave an overview of the project](https://go.dev/blog/vuln). Now she’s back with a release ready to put into production. It statically analyzes your code and uses the [Go Vulnerability Database](https://vuln.go.dev/) to highlight relevant, known vulnerabilities. 

Julie Qiu (The Go Security Team)   [![\](https://copm.s3.amazonaws.com/bcc68a3c.png)](https://www.ardanlabs.com/consulting/?utm_source=cooperpress) 

[Go! Experts at Your Service](https://www.ardanlabs.com/consulting/?utm_source=cooperpress) — Do you need help filling skill gaps, speeding up development & creating high performing software with Go, Docker, K8s, Terraform and Rust? We’ll help you maximize your architecture, structure, tech-debt and human capital. 

Ardan Labs Consulting sponsor   

[The Gorilla (Project) Reawakens](https://gorilla.github.io/blog/2023-07-17-project-status-update/) — _Gorilla_ is/was a [suite of packages for building Go webapps](https://gorilla.github.io/) ([Mux](https://github.com/gorilla/mux) remains a popular HTTP router option) but the packages sadly went into an “archive only” mode last year. A team of developers is in the _early stages_ of resurrecting the project – watch this space. 

Gorilla Web Toolkit Maintainers   

[Analyzing Go Build Times](https://blog.howardjohn.info/posts/go-build-times/) — Go’s compiler is pretty quick, but John was curious was what factors affect compile times. In this article he used the 350,000 lines of the Istio project to put Go through its paces, try out some ideas, and ultimately came up with some tips. 

John Howard   

**IN BRIEF:** 

- Russ Cox continues with proposing new ideas: this time he suggests [the addition of a untyped zero value identifier called `zero`](https://github.com/golang/go/issues/61372) to play a `nil`-like role in a broader variety of scenarios.
- 🔟 Ten years after writing [Go: The Good, the Bad, and the Meh](https://blog.carlmjohnson.net/post/google-go-the-good-the-bad-and-the-meh/), author Carl M Johnson [reflects on his ten years using Go since then](https://blog.carlmjohnson.net/post/2023/ten-years-of-go-good-bad-meh/) – most of his points have stood the test of time, with generics and Go's backwards compatibility promise providing some unanticipated benefits.
- Jaana Dogan is really digging GitHub's Copilot [🐦 for writing interface boilerplate code.](https://twitter.com/rakyll/status/1678979284332077062)
- [Go 1.21 Release Candidate 3](https://groups.google.com/g/golang-announce/c/5golCy-_yK0) has been released.    

[Monitor, Test and Debug your APIs with APIToolkit](https://apitoolkit.io?utm_campaign=cooperpress) — A toolbox for building and maintaining APIs better than ever. Test and validate all API requests, and spot bugs faster. 

APIToolkit sponsor   

[Event-Driven Architecture: What You Need to Know](https://encore.dev/blog/event-driven-architecture) — The first in a series of posts on event-driven architecture and building a system using this paradigm in Go. This first post covers the _what_ and _why?_ 

Matt Boyle   

[5 Ways to Write a Go Database Model](https://pboyd.io/posts/5-ways-to-write-a-go-database-model/) — Paul covers the vanilla approach, using struct mapping, SQL generators (like squirrel), a code generator (sqlc), and ORMs, pointing out pros and cons for each approach. 

Paul Boyd  

🛠 Code & Tools 

[![\](https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/favx6beaakgrltv8ngsb.jpg)](https://github.com/charmbracelet/pop)   

[Pop: Charm's Latest Project Tackles Email](https://github.com/charmbracelet/pop) — The _Charm_ folks have a well earned reputation for producing useful Go powered tools and libraries and _Pop_, essentially a modern way to send emails from the terminal, looks to be no exception. 

Charm   

[ntp 1.2: A Simple NTP Client Package for Go](https://github.com/beevik/ntp) — For querying your Network Time Protocol server of choice for the current time. 

Brett Vickers   

[So You’re Still Using Infrastructure as Code?](https://encore.dev/?utm_campaign=okb&utm_medium=email&utm_source=golangweekly) — With Encore's Infrastructure SDK: No manual work to run locally, Preview Environments for each PR, and zero tedious IaC. 

Encore sponsor   

[Sarama 1.40: A Go Library for Apache Kafka](https://github.com/IBM/sarama) — Originally created by Shopify, it appears IBM has now [taken over the reins](https://github.com/IBM/sarama/issues/2461) as Shopify wants to bind against [librdkafka](https://github.com/confluentinc/librdkafka) in future instead. 

IBM   

[Go Rate Limiter 0.3: A Blocking 'Leaky-Bucket' Rate Limit Implementation](https://github.com/uber-go/ratelimit) — The ‘bucket’ gets refilled based upon the time elapsed between requests. v0.3 sees a return to development after a pause for a couple of years and offers a _“more efficient internal implementation”_ without any external changes. 

Uber    

Jobs  

[Find a Job Through Hired](https://hired.com/join/?utm_source=newsletter&utm_medium=sponsor&utm_campaign=%28b2c%29%28l-all%29%28r-all%29%28cooper-golangweekly%29&utm_content=find-your-next-job) — Hired makes job hunting easy-instead of chasing recruiters, companies approach you with salary details up front. Create a free profile now. 
Hired    

📰 The Go-powered RSS reader 

[![\](https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/n4jmhkl2vweohcmez3oc.jpg)](https://github.com/TypicalAM/goread)  

[goread: A Terminal-Based RSS / Feed Reader](https://github.com/TypicalAM/goread) — If you're tired of social news sites like Twitter or Reddit chopping and changing about, following a variety of RSS or Atom feeds remains a great option, and there's a Go-flavored terminal client built around [Bubble Tea](https://github.com/charmbracelet/bubbletea) you can try.

P.S. _Go Weekly_ has [its own RSS feed](https://golangweekly.com/rss) if you want to test it out. 

Adam Piaseczny         

Curated by Peter Cooper and [Glenn Goodrich](https://twitter.com/ruprict). 

[Change your email](https://golangweekly.com/edit_subscription/*|UID|*)
[Stop getting this newsletter](https://golangweekly.com/leave/*|UID|*) 

© Cooper Press Ltd · Fairfield Enterprise Centre, Louth, LN11 0LS, United Kingdom
