#​415 — June 10, 2022

Unsubscribe  |  Read on the Web

The Go Weekly Newsletter

Go has passed 100,000 stars on GitHub. There was no obvious top feature this week, so what better way to celebrate than to mark the (arguably quite arbitrary) milestone of Go passing into the six figure GitHub stars club? I mean, it's twice as many as Ruby on Rails has, and GitHub was built with that.. :-)

Data Race Patterns in Go — Uber's engineers analyzed over 1,100 data races and found that it’s much easier than you might think to introduce them in Go "due to certain language design choices." This post breaks down seven of the most common reasons – your code probably engages in one of them too.

Chabbi and Ramanathan (Uber)

Ebiten, the 2D Game Library for Go, Becomes Ebitengine™ — If you want to create a 2D game in Go, whether for desktop, mobile, or even the Nintendo Switch, this remains a great place to start, and now it’s got a new name too (in order to land a trademark in Japan, I'm told). There’s also an Ebitengine Game Jam starting next week, if you want some motivation to give it a try.

Hajime Hoshi

Flaky Tests Slowing You Down? BuildPulse Can Help — BuildPulse automatically detects and tracks flaky tests in your projects so you can stop wasting time chasing broken builds and get back to coding. To top it off, BuildPulse works seamlessly with Go, and you can set it up in just a few minutes.

BuildPulse sponsor

▶  Why a Dev Built a Faster rsync from Scratch in Go — A look at one developer’s story (oriented around a 50-minute talk) about reimplementing a common file transfer tool in Go. Less about Go, per se, and more about the problem at hand, networking, and gokrazy.

Bryan Cockfield / Michael Stapelberg

Fyne 2.2: Cross Platform GUI Toolkit for GoFyne is a continually improving option for building both desktop and mobile UIs with Go and now includes extra controls like a rich text widget, system tray support, JSON theming, and more. Is there a tutorial? Yes there is.


Quicker bits:

How to Embed a React App in a Go Binary — While you can use Go to write a backend API, you might use something like React on the front end. Given Go’s power in producing single distributable binaries, could you put your front end code into the binary too? Sure.

Nils Caspar

Generating a Random float64 with crypto/randcrypto/rand is more cryptographically secure than math/rand but offers fewer options (which you can work around, as seen here).

Brandur Leach

(Mostly) Automatic Go Dependency Updates with GitHub Actions — When there’s no defined process ensuring dependencies get updated, well.. you’re going to end up with some outdated packages in your stack. This isn’t a hard task, really, but one that people don’t always think about.

Brandur Leach

Performance of Coroutine-Style Lexers in Go — Spoiler alert: They’re fast. But, does speed really matter for a lexer? Well, if you’re interested enough to read this article, then you probably already know that answer.

Eli Bendersky

Using Go's Standard Library Interfaces — A more introductory item. Nice to see more people going back to cementing knowledge through blogging.

Elton Minetto


Golang Developer at X-Team (Remote) — Join the most energizing community for developers and work on long-term projects for Riot Games, FOX, Sony, Coinbase, and more.

Senior Backend Software Engineer - Remote — Hiring experienced Go developers interested in building open source software around networking, security and distributed systems.

Golang Engineers — 100% Remote (North/South America & Europe) — We’ve got several opportunities for Go devs (some working directly with Bill Kennedy!) and would love to hear from those looking for new challenges in distributed systems projects.
Ardan Labs

Find a Job Through Hired — Create a profile on Hired to connect with hiring managers at growing startups and Fortune 500 companies. It's free for job-seekers.

🛠 Code & Tools

GoPlus (Go+) 1.1: A More Script-y Variant of Go — A confusingly named but well intentioned Go variant, of sorts, that leans more towards Python-style simplicity for scripting, educational, and data science use cases. v1.1 brings in a lot more module support. There’s a little demo on their home page.


Mo: Monads and Popular FP Abstractions for Go 1.18+ — One for the functional programming fans with a fistful of monads (including family favorites like Option (Maybe), Result and Either) and powered by generics.

Samuel Berthe

Benthos 4.2: A Stream Processor for 'Mundane Tasks' — It’s been nearly a year since we mentioned Benthos but it’s been coming along so well recently. Define pipelines to connect together various sources and sinks (e.g. S3, Elasticsearch, files, Redis, etc.) and perform operations on the payloads.

Ashley Jeffs

Issue Tracking Has Never Been Easier With Shortcut

Shortcut (formerly Clubhouse.io) sponsor

Ddosify 0.8: High-Performance HTTP Load Testing Tool — Supports both HTTP and HTTP/2. Be sure to use this with permission and for good.


gta: Find Which Go Packages Have Deviated from Upstream — Does transitive analysis to find packages whose dependencies have changed.


DurationLint: Linter to Disallow Use of Untyped Literals and Constants as time.Duration — A very specific pain point.

Gabriele Viglianisi

garr: High Performance, Thread-Safe, Lock-Free Data Mechanisms — Currently includes a circuit breaker, adder, queue, retry/backoff, and worker pool.


SFTPGo 2.3: A Full Featured SFTP Server Built in Go — Note the GNU AGPLv3 license.

go-srpc: Simple Streaming RPC for Go
Xie Jingyi

SyMon: A Simple Linux System Monitoring and Alerting Tool
Dhamith Hewamullage

rain: A BitTorrent Client and Library in Go
Cenk Altı

Sarama: A Go Client Library for Apache Kafka