---
title: "It's about time"
publication: "Go Weekly"
issue: 515
published_at: "2024-07-16"
canonical_url: "https://golangweekly.com/issues/515"
---

Plus Go jumps up the TIOBE index, binary search with SIMD and Go's assembler, and embedding a NATS server. |        

#​515 — July 16, 2024 

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

Together with [![WorkOS\](https://res.cloudinary.com/cpress/image/upload/c_fill,g_auto,w_514,h_98/e_make_transparent/co_white,e_outline:9/tdfxwgk852ui9leli4wm.png)](https://workos.com/?utm_source=cpgolang&utm_medium=newsletter&utm_campaign=q22024)  

Go Weekly 

[![\](https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/v6oxrjneol3x5m5tpbjt.jpg)](https://coder.com/blog/introducing-quartz)  

[Quartz: A Deterministic Time Testing Library](https://coder.com/blog/introducing-quartz) — A new mocking library designed for testing code that relies on time, by introducing a little determinism and control to proceedings.. [GitHub repo.](https://github.com/coder/quartz) 

Spike Curtis   

[Go Range Iterators Demystified](https://www.dolthub.com/blog/2024-07-12-golang-range-iters-demystified/) — In Go 1.22 ([behind a flag](https://tip.golang.org/wiki/RangefuncExperiment)) or 1.23 (currently in the [release candidate stage](https://groups.google.com/g/golang-announce/c/8ciOP5ve_CM)), 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   [![\](https://copm.s3.amazonaws.com/bd8798a2.png)](https://workos.com/?utm_source=cpgolang&utm_medium=newsletter&utm_campaign=q22024) 

[WorkOS: The Modern Identity Platform for B2B SaaS](https://workos.com/?utm_source=cpgolang&utm_medium=newsletter&utm_campaign=q22024) — 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](https://clement-jean.github.io/simd_binary_search_tree/) — 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](https://go.dev/doc/asm) and doesn’t walk through the build process. I’ve put together the pieces of Clément’s code [into a single GitHub Gist](https://gist.github.com/peterc/d8b3866843217a21048029bbeb066f45) to make it easier to reproduce for yourself, though.  

**IN BRIEF:** 

- The oft (and fairly)-criticized [TIOBE Index of programming langauge popularity](https://www.tiobe.com/tiobe-index/) 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](https://changelog.com/gotime/322) nowadays, after 13 years of doing just that.   

▶[Give Your Go App 'Superpowers' with an Embedded NATS Server](https://www.youtube.com/watch?v=cdTrl8UfcBo) — [NATS](https://nats.io/) 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](https://nyadgar.com/posts/go-profiling-like-a-pro/) — 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](https://www.warpstream.com/blog/kafka-is-dead-long-live-kafka?utm_source=golang_weekly&utm_medium=email&utm_campaign=july_16_2024_sponsored_link) — 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](https://packagemain.tech/p/mastering-solid-principles-with-go) Alex Pliutau 

📄 [Docker Best Practices: Choosing Between `RUN`, `CMD`, and `ENTRYPOINT`](https://www.docker.com/blog/docker-best-practices-choosing-between-run-cmd-and-entrypoint/) Jay Schmidt (Docker) 

📄 [Demystifying Go Strings](https://medium.com/@andreiboar/demystifying-golang-strings-05981b84f1a7) Andrei Boar  

🛠 Code & Tools 

[![\](https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/cquaxqof4cy8ofl5coq6.jpg)](https://fyne.io/)  

[Fyne 2.5: GUI App Framework for Desktop, Mobile and Web](https://fyne.io/) — 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](https://github.com/fyne-io/fyne/releases/tag/v2.5.0) is a big release with support for Wayland as well as internationalization. It requires Go 1.19+. [GitHub repo.](https://github.com/fyne-io/fyne) 

Fyne Team   

💡 In [Writing GUI apps doesn't have to be painful](https://blog.ubavic.rs/10/), 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](https://github.com/0verread/minigrad) — A neural network library using an autograd approach. It’s essentially [Andrej Karpathy](https://karpathy.ai/)’s (previously of OpenAI) [Micrograd](https://github.com/karpathy/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](https://docs.google.com/forms/d/e/1FAIpQLSdBPMJathunNduH8LKM5EPcUSIyFGzL3K3zPq_dpOZJ1ImIuQ/viewform). 

--- 

🛡️ Protect your application infrastructure running on AWS with this time tested and essential security checklist. [Download now](https://localops.co/resources/aws-security-checklist?utm_source=golang-weekly&utm_medium=email&utm_campaign=july2024)! 

--- 

🎥[Iris seeks Sr. Backend Engineer](https://jobs.gem.com/iris/am9icG9zdDrDqzMd89L_FfWfyFHK2X3X?utm_source=GemLink&utm_medium=c291cmNlOoD_YZZ2y2eN0fAW7O0-mkM) for edge-deployed Go/Rust dev. Work on an AI-powered robotic camera platform. Remote, equity, competitive pay.      

[Build Tools for Go](https://www.inkmi.com/blog/go-build-tools-make-bazel-just-xc-taskfile-mage) — 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](https://github.com/felangga/chiko) — Uses the popular [tview terminal UI widget library](https://github.com/rivo/tview) to offer a way to interact with gRPC services. 

felangga   

[timediff: Produce Human Readable, Relative Time Differences](https://github.com/mergestat/timediff) — For example: `timediff.TimeDiff(time.Now().Add(-3 * time.Minute))` would produce “3 minutes ago”. 

MergeStat   

- [GoReleaser 2.1](https://carlosbecker.com/posts/goreleaser-v2.1) – Build and release Go binaries for several platforms.
- [phonenumbers 1.4](https://github.com/nyaruka/phonenumbers) – Go port of Google's libphonenumber library.
- [gocron 2.10](https://github.com/go-co-op/gocron) – Run Go functions at pre-determined intervals.
- [go-github 63.0](https://github.com/google/go-github) – GitHub v3 API client library.
- [fq 0.12](https://github.com/wader/fq) – Like `jq` for binary formats.         

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
