---
title: "Test gains and memory drains"
publication: "Go Weekly"
issue: 457
published_at: "2023-04-25"
canonical_url: "https://golangweekly.com/issues/457"
---

Plus a real time strategy game built in Go, and a mutation testing tool. |        

#​457 — April 25, 2023 

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

Together with [![Courier logo\](https://res.cloudinary.com/cpress/image/upload/c_fill,g_auto,w_280,h_50/e_make_transparent/co_white,e_outline:7/clkuuoftwiz8z2xjnkhb.png)](https://www.courier.com/docs/guides/getting-started/go/?utm_campaign=q1-fy23-cooper-press&utm_source=email&utm_medium=go-newsletter-4-18-23&utm_content=go-quickstart-docs)  

Go Weekly 

[![\](https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/v5rsmsr6ec4nlx5ounks.jpg)](https://grafana.com/blog/2023/04/19/how-to-troubleshoot-memory-leaks-in-go-with-grafana-pyroscope/)  

[How to Troubleshoot Memory Leaks with Grafana Pyroscope](https://grafana.com/blog/2023/04/19/how-to-troubleshoot-memory-leaks-in-go-with-grafana-pyroscope/) — Explore common causes of memory leaks in Go and learn to use Pyroscope, an open source continuous profiling solution, itself [written in Go](https://github.com/grafana/pyroscope), to find and fix such leaks. 

Cyril Tovena (Grafana Labs)   

[Go Integration Testing with Courage and Coverage](https://evilmartians.com/chronicles/go-integration-testing-with-courage-and-coverage) — A tale of integrating test coverage tracking into an active Go project as part of pushing the overall coverage from a worrying 50% to a somewhat better 76%. Go 1.20’s new [coverage profiling support](https://tip.golang.org/doc/go1.20#cover) is also showcased. 

Vladimir Dementyev   [![\](https://copm.s3.amazonaws.com/4cef2e19.png)](https://www.courier.com/docs/guides/getting-started/go/?utm_campaign=q1-fy23-cooper-press&utm_source=email&utm_medium=go-newsletter-4-18-23&utm_content=go-quickstart-docs) 

[Add a Full-Featured Notification Center to Your Go App in Minutes](https://www.courier.com/docs/guides/getting-started/go/?utm_campaign=q1-fy23-cooper-press&utm_source=email&utm_medium=go-newsletter-4-18-23&utm_content=go-quickstart-docs) — With out-of-box user preferences and inbox, comprehensive API, web-based template designer, and automated delivery flows. 

Courier.com sponsor   

**IN BRIEF:** 

- 📍 The folks at JetBrains have outlined [the roadmap for the next release](https://blog.jetbrains.com/go/2023/04/19/roadmap-2023-2/) of the _GoLand_ IDE.
- 🧊 It's a simple idea, but I liked it: [code to create an animated GIF of a 3D wireframe cube](https://gist.github.com/rkibria/8a94ae7ecbbf8abc06a165d9ebfaa6f2) spinning in space.
- 📗 James Smith's [Build Your Own Database book](https://build-your-own.org/blog/20230420_byodb_done/) is now complete. The sample code is written in Go. The [first half of the book](https://build-your-own.org/database/) can be read online for free and focuses on KV stores, whereas the second half focuses on implementing a mini relational database.
- [Keep the monolith, but split the workloads](https://incident.io/blog/monolith), says Lawrence Jones.     

⏪ Revisiting Some Greatest Hits  

[When To Use Generics](https://go.dev/blog/when-generics) — Some general guidelines for when to use generics that boils down to one simple guideline: If you find yourself writing the exact same code multiple times, where the only difference between the copies is that the code uses different types, consider whether you can use a type parameter. 

Ian Lance Taylor   

[Getting Familiar with Workspaces](https://go.dev/blog/get-familiar-with-workspaces) — Remember Go 1.18’s other big feature? Workspaces. Workspaces _“let you work on multiple modules simultaneously without having to edit go.mod files for each module.”_ Beth broke down how to get started. 

Beth Brown (Go Team)     

[A Simple Overview of Authentication Methods for Kubernetes Clusters](https://goteleport.com/blog/kube-authn-methods/?utm_campaign=eg&utm_medium=partner&utm_source=golang) — Kubernetes has a wide range of authentication methods. We will detail each of them and their uses in this article. 

Teleport | goteleport.com sponsor   

▶[How to Monitor Your Go App with Prometheus](https://www.youtube.com/watch?v=LKBl6lN6ENk) 
Anthony GG  

🛠 Code & Tools 

[![\](https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/i6v9filho9iubgssmk6n.jpg)](https://github.com/gtramontina/ooze)  

[Ooze: A Go Mutation Testing Tool](https://github.com/gtramontina/ooze) — Fuzz testing messes around with the _input_ to a testing scenario, but mutation testing goes one step further and changes the actual implementation of the code! The key idea is that if code can be changed but tests still pass, there’s something amiss. 

Guilherme J. Tramontina   

[gops: List and Diagnose Currently Running Go Processes](https://github.com/google/gops) — Works with any Go-built processes but if your program can start the diagnostics agent then extra information can be obtained. 

Go Team   

[“Our Backend Team Loves Encore!”](https://encore.dev/customers/lizza?utm_campaign=lizza&utm_medium=email&utm_source=golangweekly) — See how Lizza used Encore's development platform to 3x delivery speed and save 100+ hours of DevOps work per month. 

Encore sponsor   

[Jet 2.10: Type Safe SQL Builder with Code Generation](https://github.com/go-jet/jet) — A database access solution consisting of a type-safe SQL builder with code generation and automatic query result data mapping. It supports PostgreSQL, MySQL, CockroachDB, MariaDB and SQLite. 

Jet   

[Hermes: A Document Management System](https://github.com/hashicorp-forge/hermes) — The folks at Hashicorp have open-sourced a tool to support their writing culture, including workflow approval, full-text search, and more. [This introductory blog post](https://www.hashicorp.com/blog/introducing-hermes-an-open-source-document-management-system) shows off what it looks like. 

HashiCorp   

[Cobra 1.7: A Framework for Building Modern CLI Apps](https://cobra.dev/) — A significant project in the Go CLI space oriented around structure, subcommand based CLIs, flags, generating man pages, etc. It was originally created for [Hugo](https://gohugo.io/) but is now used by numerous projects. 

Steve Francia   

**QUICK RELEASES:** 

- [Tengo 2.16](https://github.com/d5/tengo) – ([Playground](https://tengolang.com/))
 ↳ Scripting language you can use within apps.
- [go2rtc 1.4](https://github.com/AlexxIT/go2rtc)
 ↳ Camera streaming app with broad protocol support.
- [Raft 1.5](https://github.com/hashicorp/raft/releases/tag/v1.5.0)
 ↳ Go implementation of Raft consensus.
- [Ory Kratos 0.13.0](https://github.com/ory/kratos/releases/tag/v0.13.0)
 ↳ Next-gen identity server.
- [go-github 52.0](https://github.com/google/go-github/releases/tag/v52.0.0) – GitHub v3 API client library.
- [GO-FUSE 2.3](https://github.com/hanwen/go-fuse) – FUSE bindings for Go.
- [Go OpenAI API Client 1.9](https://github.com/sashabaranov/go-openai)
- [gocron 1.23](https://github.com/go-co-op/gocron/releases/tag/v1.23.0)    

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   

🧑‍💻 Got a job listing to share? _[Here's how](https://booking.cooperpress.com/jobs)_.   

🕹 And for after work hours.. 

[![\](https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/xb3zan94dnj51niw7hpg.jpg)](https://quasilyte.itch.io/roboden)   

[Roboden: A Real Time Strategy Game](https://quasilyte.itch.io/roboden) — An 'indirect control' real-time strategy game about robot colonies written in Go using the [Ebitengine](https://ebitengine.org/) 2D game library. Thanks to WebAssembly you can play it in the browser but native downloads are available, as is [the source code](https://github.com/quasilyte/roboden-game). 

Iskander         

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
