#455 — April 11, 2023
i️ As mentioned last time, Go Weekly is now sent on Tuesdays, so if you missed us at all, we're now back on schedule 😄
__
Peter Cooper, your editor
The Go Weekly Newsletter
The Smallest Go Binary - 5KB? — I thought this sounded a bit silly at first, especially dated April 1st, but the author (also the main maintainer of purego) had an interesting use case: they wanted to use Go’s assembler but not Go’s runtime. Turns out it’s possible, with a lot of fiddling around. Note: You will almost certainly never need to do this yourself, but it's fun to see the parts involved in doing so.
Over Engineered
Developing a RESTful API with Go and Gin — It’s neat to see a tutorial like this pop up on the official Go site. It walks through the basics of using Gin to create a simple RESTful API that stores its data in memory for simplicity.
Official Go Docs
What's Next in Kubernetes Access? — Manage and audit access to all Kubernetes infrastructure - databases, clusters, and more - using biometrics rather than shared tokens and gain visibility on all actions in a K8s pod with full session recordings, all with a free trial of Teleport.
Teleport | goteleport.com sponsor
FerretDB 1.0: An Open Source MongoDB Alternative — FerretDB is an interesting project we’ve been following over the past year. Built in Go, it converts MongoDB’s wire protocol queries into SQL with Postgres on the backend, so you can reproduce the MongoDB experience but without its controversial license change.
Peter Farkas
What's New in GoLand 2023.1 — GoLand is a popular (though commercial) IDE in the Go space, often coming in second only to VS Code, so it’s interesting to see what they’ve added. The latest version introduces a vulnerability checker and vulnerable package updater, improved gRPC tooling, and the ability to run ‘scratch’ files with non-standard-library packages.
JetBrains
IN BRIEF:
-
Go 1.20.3 and Go 1.19.8 have been released.
-
Go 1.21 is likely to have a static toolchain on Linux, rather than dynamically linking against glibc.
-
Over on Reddit, a Go developer noticed their Go code was running 2-3x slower than a JavaScript equivalent. People shared various optimizations with replacing all
ints withuint32yielding the biggest improvement. -
No code, but it was interesting reading about how Julia Evans approached building a zine feedback site with Go, SQLite and Vue.js.
How Do You Name Your Go Variables — While this is a simple question on the surface, it often generates a ton of very strong opinions and lively discussion, as it did with the Lobsters community.
Lobsters
Send Transactional Emails with Golang — Step-by-step guide with three different methods: SMTP, 3rd party email provider, and with notification infrastructure.
Courier.com sponsor
How to Secure a Go App with JWT — Authentication and authorization with middleware while staying stateless with REST.
Dilara Görüm
🛠 Code & Tools
Excelize: Library for Working with Excel Spreadsheets — Read and write XLAM / XLSM / XLSX / XLTM / and XLTX files. A long time library that keeps going from strength to strength. GitHub repo.
QI-ANXIN GROUP
GoReleaser v1.17: Go Binary Build and Delivery Tool — The motivation for GoReleaser is to simplify the release process by building binaries for multiple platforms, creating a GitHub release, and even releasing a Homebrew formula. GitHub repo.
Carlos Alexandro Becker
Authorization Simplified with an Open-Source Authorizer Written in Go — Topaz is a Go native authorization service with built-in support for every authorization model: RBAC, ABAC, and ReBAC.
Aserto sponsor
Tokenizer: Pure Go Implementation of OpenAI's Tokenizer — When you use OpenAI’s GPT, input and output is delivered in ‘tokens’ which are not the same as characters, syllables or words, but somewhere in between. Truly mindboggling.
Wahlmann and Wendt
bearclaw: A Tiny Static Site Generator — "makes converting markdown into websites easy." Offers an RSS feed too. Possibly worth considering if you want something even simpler than Hugo.
bearclaw
QUICK RELEASES:
-
env 8.0
↳ Parse environment variables into structs. -
Go OpenAI 1.7
↳ OpenAI / ChatGPT client library. -
GoToSocial 0.8
↳ ActivityPub server powered by Go. -
VHS 0.4 – Record GIFs of terminal actions.
-
ws 1.2 – Tiny WebSocket library.
-
gofumpt 0.5 – A stricter
gofmt. -
SFTPGo 2.4.5 – Full featured SFTP server.
-
tdl 0.8 – Telegram file downloader.
Jobs
Site Reliability Engineer — Join our "kick ass" team. Our software team operates from 17 countries and we're always looking for more exceptional engineers.
Sticker Mule
Find a Job Through Hired — 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 .
🕰 ICYMI (Some older stuff we might have missed)
GitHub Actions and Go — A CI workflow for Go you can reuse and tailor to your own needs. See the final build.yml.
Oleg Kovalov
Comprehensive Guide to Testing in Go — Covers things like table-driven tests, fuzzing, and parallel tests.
Alexandre Couëdelo
Efficiently Writing Binary Data — ..or speeding up writing binary data in Go by 14x. Serializing data structures is a common need, but in some cases you may need a more efficient option than binary.Write.
Javier Honduvilla Coto
Speeding Up a CLI App with Concurrency
Michael Cuffaro