#​418 — July 1, 2022

Unsubscribe  |  Read on the Web

☺️ Somehow we've only just noticed that the go.dev site links to Golang Weekly in its footer — a big thank you to anyone involved in that decision. We're not an official Go newsletter by any means, but we try our best to live up to the ideals of the Go community and to reflect everything we see going on. Thanks to all of you for your ongoing support!
Peter, Glenn, and the Cooperpress team

The Go Weekly Newsletter

Awesome Go: Almost 2400 Categorized Go Resources — Every year we link to this fantastic resource because unlike many ‘awesome’ lists, it continues to get very frequent updates and you’re encouraged to submit contributions of your own too (but don't forget to send them to us too! 😉)

Awesome Go

▶  How to Write a Fuzz Test — Last week we featured Saba’s video about what fuzz testing is but now she’s back with a six-minute narrated demo, including how to look at failures and rerun them specifically.

Nooras Saba (Google)

Gophers - Opportunity is Knocking — We’re a premier software engineering firm looking for mid to senior level engineers to help us develop advanced software solutions and applications in Go. Got at least 1 year of professional Go experience and located in the Americas or Western Europe? We want to hear from you.

Ardan Labs sponsor

Notes from a Go 1.17 to 1.18 Upgrade — The folks at Brev were itching to upgrade to Go 1.18 to get their hands on generics and this post touches on a few things they encountered.

Alec Fong

A Limitation on What go install Can Install (as of Go 1.18)“For now, if you’re developing a Go program and you need to use replace directives in your go.mod during development, you’ll have to do some extra work.”

Chris Siebenmann

Creating a Custom GitHub Action with Go — If you want to go even smaller with your Docker image, though, consider using multi stage builds with distroless, as labeler-action does.

Gurleen Sethi

Quicker bits:


Software Engineers — Sticker Mule is the Internet's most "kick ass" brand. Our software team operates from 17 countries, and we're always looking for more exceptional engineers.
Sticker mule

Full Stack Engineer at Shipyard (Remote) — Scope, architect, and build features for our data orchestration platform to accelerate our vision of simplifying data automation.

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

go-nanoid: An Fast and Efficient Unique ID Generator — Note that this does not generate UUIDs, but it generates URL friendly IDs from a larger character set which makes them shorter. ksuid may be of interest to you if you’d prefer something sortable.

Jaden X

Boxes and Glue: A Typesetting Library — What a charming name. This is a PDF typesetting library using “the spirit of TeX’s algorithms” to lay out elements onto the page. This tweet gives an idea of how rendered text looks. (Note the AGPLv3 license.)

speedata GmbH

go-contracts.co.uk: Find the Best Go Contract Opportunities in the UK

go-contracts․co.uk sponsor

Sliding Window Sampling for go-metrics — Usually with go-metrics, old data is only expired as new data comes in but on low-volume metrics this can cause misleading results through the use of stale data. The sliding window approach implemented here helps to resolve that.


Counterfeiter: A Tool for Generating Self-Contained, Type-Safe Test Doubles
Max Brunsfeld

Civ5MapImage: Convert a Civilization V Map to an Image — I've 'wasted' many an hour on Civ, but you can’t get more niche than this, surely :-)
Samuel Yuan


Pongo2 6.0 – Django-syntax like template-engine for Go.
eRPC 7.0 – Extensible, easy-to-use RPC framework.
go-elasticsearch 8.3 – Official Go client for Elasticsearch.
Traefik 2.8 – HTTP reverse proxy and load balancer.
FerretDB 0.4 – MongoDB alternative but with a Postgres backend.
Vitess 14.0 – Clustering system for horizontal scaling of MySQL.
Casbin 2.48 – Authorization library supporting multiple access control models.
fasthttp 1.38 – Fast HTTP package.
go-version 1.6 – Library for parsing and verifying versions and constraints.

🕰   ICYMI (Some older stuff we might have missed)

How to Structure a Go Project — Structuring projects is a perennial topic in every developer community, but here's how one gopher approaches it.
Benjamin Cane

Don't Use a Different Interface in Tests — The underlying point has merit, but the example is a bit unconventional, allowing test concerns to leak into production code.
Komu Wairagu

Test Parallelization: Understanding the t.Parallel() Method — Discusses how and when Go runs parallel tests by default as well as what happens when t.Parallel() is called. Spoiler: It’s not what you think happens.
Yoshiki Shibata (Mercari Engineering)

Building a Terminal User Interface with Go — A fun tutorial that uses Tview to create a form-based terminal UI, which is easier than we might have guessed.
Josh Alletto