#515 — July 16, 2024
Go Weekly
Quartz: A Deterministic Time Testing Library — A new mocking library designed for testing code that relies on time, by introducing a little determinism and control to proceedings.. GitHub repo.
Spike Curtis
Go Range Iterators Demystified — In Go 1.22 (behind a flag) or 1.23 (currently in the release candidate stage), you can use the range keyword to iterate over custom collection types. Zach walks (iterates?) us through from the basics up to some more complex examples.
Zach Musgrave
WorkOS: The Modern Identity Platform for B2B SaaS — Start selling to enterprise customers with just a few lines of code. WorkOS provides flexible, easy-to-use APIs to integrate SSO, SCIM, and RBAC in minutes. It's used by hundreds of high-growth startups including Perplexity, Vercel, Drata, & Webflow.
WorkOS sponsor
Building a Binary Search Tree with SIMD and Go's Assembler — When you want a little more performance than Go provides naturally, or access to underlying CPU features unavailable in Go, leaning on assembly language is one way to do it. Clément shows a practical example here.
Clément Jean
⚠️ Note that the tutorial above assumes knowledge of Go's assembler and doesn’t walk through the build process. I’ve put together the pieces of Clément’s code into a single GitHub Gist to make it easier to reproduce for yourself, though.
IN BRIEF:
-
The oft (and fairly)-criticized TIOBE Index of programming langauge popularity has had an update with Go moving up to 7th place, after only entering the top 10 earlier this year. A big relative jump, even if you question the methodology.
-
🎧 Mat Ryer went on the Go Time podcast to talk about how he builds HTTP services in Go nowadays, after 13 years of doing just that.
▶ Give Your Go App 'Superpowers' with an Embedded NATS Server — NATS is a lightweight real-time client/server messaging system, but a cool feature of NATS is you can embed it directly into a Go app and take advantage of its features without relying on a separate server.
Synadio
Profiling in Go: A Practical Guide — Pinpoint performance bottlenecks in your apps by profiling their activity and optimizing things based on the results.
Noam Yadgar
Kafka Is Dead, Long Live Kafka — Kafka is polarizing, yet ubiquitous. What if you could run Kafka as a single, stateless Go binary and reduce your costs?
WarpStream sponsor
📄 Mastering SOLID Principles with Go Examples Alex Pliutau
📄 Docker Best Practices: Choosing Between RUN, CMD, and ENTRYPOINT Jay Schmidt (Docker)
📄 Demystifying Go Strings Andrei Boar
🛠 Code & Tools
Fyne 2.5: GUI App Framework for Desktop, Mobile and Web — Fyne isn’t a new project, but it’s been years since we featured it, and it’s a pretty neat way to build GUI and mobile apps with Go. v2.5 is a big release with support for Wayland as well as internationalization. It requires Go 1.19+. GitHub repo.
Fyne Team
💡 In Writing GUI apps doesn't have to be painful, Nikola Ubavić explains how he considered numerous languages and GUI app development approaches before settling on Go and Fyne (above).
Minigrad: Andrej Karpathy's Micrograd in Go — A neural network library using an autograd approach. It’s essentially Andrej Karpathy’s (previously of OpenAI) Micrograd implementation in Go, rather than Python.
Jeet
📰 Classifieds
Meetings should be more like code reviews. We're building a product for that and looking for software leaders to join the beta. Apply here.
🛡️ Protect your application infrastructure running on AWS with this time tested and essential security checklist. Download now!
🎥 Iris seeks Sr. Backend Engineer for edge-deployed Go/Rust dev. Work on an AI-powered robotic camera platform. Remote, equity, competitive pay.
Build Tools for Go — If the out-of-the-box build tools aren’t getting it done, here’s list of open source build tools to consider, including Mage and Taskfile.
Inkmi
Chiko: An Elegant gRPC TUI Client — Uses the popular tview terminal UI widget library to offer a way to interact with gRPC services.
felangga
timediff: Produce Human Readable, Relative Time Differences — For example: timediff.TimeDiff(time.Now().Add(-3 * time.Minute)) would produce "3 minutes ago".
MergeStat
-
GoReleaser 2.1 – Build and release Go binaries for several platforms.
-
phonenumbers 1.4 – Go port of Google's libphonenumber library.
-
gocron 2.10 – Run Go functions at pre-determined intervals.
-
go-github 63.0 – GitHub v3 API client library.
-
fq 0.12 – Like
jqfor binary formats.