---
title: "Forget TypeScript, how about porting Doom to Go?"
publication: "Go Weekly"
issue: 546
published_at: "2025-03-19"
canonical_url: "https://golangweekly.com/issues/546"
---

Plus should Go have tuples? |        

#​546 — March 19, 2025 

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

Together with [![Frontend Masters logo\](https://res.cloudinary.com/cpress/image/upload/c_fill,g_auto,w_300,h_70/e_make_transparent/co_white,e_outline:5/nk0tfdvalivacz8rw7rt.png)](https://frontendmasters.com/workshops/vanilla-js-go/?utm_source=email&utm_medium=golangweekly&utm_content=vanjsgo)   

Go Weekly 

[![\](https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/iozhkw9nuye767zhxqd9.jpg)](https://go.dev/blog/osroot)  

[Traversal-Resistant File APIs](https://go.dev/blog/osroot) — Among the lesser known new features in recent versions of Go are some ways to improve file system security when end user input might have an impact on file paths your app tries to access, including `os.Root`, `filepath.IsLocal`, `filepath.EvalSymLinks` and `filepath.Localize`. A must read. 

Damien Neil   

[Were Multiple Return Values a Mistake for Go?](https://herecomesthemoon.net/2025/03/multiple-return-values-in-go/) — An interesting technical post critiquing the effects of one of Go’s earliest design decisions. This is an area where opinions will differ strongly, but the author thinks Go sorely needs to support tuples. 

Mond   [![\](https://res.cloudinary.com/cpress/image/upload/c_limit,w_480,h_480,q_auto/copm/bce2d419.png)](https://frontendmasters.com/workshops/vanilla-js-go/?utm_source=email&utm_medium=golangweekly&utm_content=vanjsgo) 

[📅 Live Workshop: Build Production-Ready Apps with JavaScript & Go](https://frontendmasters.com/workshops/vanilla-js-go/?utm_source=email&utm_medium=golangweekly&utm_content=vanjsgo) — Join Maximiliano Firtman next week _(online or in-person)_ for a 3-day workshop, learning how to build real-world, fully functional web apps using vanilla JS & Go. Create performant, scalable apps. 

Frontend Masters sponsor   

[TypeScript's Go Port Already Leading to Optimizations for Go](https://github.com/golang/go/issues/72815#issuecomment-2719445786) — Last week’s big news was about the TypeScript compiler [being ported to Go](https://devblogs.microsoft.com/typescript/typescript-native-port/) for performance reasons. A neat side effect of such a large project entering our ecosystem is the increased potential for even more performance improvements for Go itself, something that has already begun to occur.. 

GitHub Go Repo   

[Go Structs and Interfaces Made Simple](https://getstream.io/blog/go-structs-interfaces/) — An introduction (or refresher) of Go’s core building blocks when it comes to working with data types and structs – an approach that differs somewhat from those favored in object oriented languages like C++ or Java. 

Deven J (Stream)   

📄 [Benchmarking: What You Can't Miss in Go 1.24](https://jarosz.dev/code/benchmarking-what-you-cannot-miss-in-go-1.24/) Jakub Jarosz 

📄 [How GitHub Engineers Learn New Codebases](https://github.blog/developer-skills/application-development/how-github-engineers-learn-new-codebases/) Brittany Ellich (GitHub) 

📺 [How to Implement Server-Sent Events in Go](https://www.youtube.com/watch?v=nvijc5J-JAQ) Alex Pliutau  

🛠 Code & Tools 

[![\](https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/lf7jrrlkakuxtongn6tw.jpg)](https://gitlab.com/cznic/doomgeneric/)  

[doomgeneric: Doom, Ported to Go?](https://gitlab.com/cznic/doomgeneric/) — If classic 90s FPS Doom can be ported to JavaScript and made to run [inside a PDF](https://github.com/ading2210/doompdf), a Go port should be a piece of cake, right? Here’s a little slice of magic involving using the [ccgo](https://pkg.go.dev/modernc.org/ccgo/v4) C-to-Go compiler. Don't get _too_ excited though as it's a limited proof of concept and Linux only, but it's neat to see what `ccgo` is capable of. 

cznic   

[golang-set: A Simple, Well-Tested, Generic Set Type](https://github.com/deckarep/golang-set) — _“Until Go has sets built-in…use this.”_ The latest [v2.8 release](https://github.com/deckarep/golang-set/releases/tag/v2.8.0) adds support for Go 1.23’s range-over-func iteration. 

Ralph Caraveo   

[🔒 Protect Against AI Bots, Fraud, and Abuse in Real Time](https://workos.com/radar?utm_source=cpgo&utm_medium=newsletter&utm_campaign=q12025) — WorkOS Radar protects your app with advanced device fingerprinting — stop fake signups, free tier abuse, bot attacks and brute force attempts today. 

WorkOS sponsor   

[DiceDB: A Reactive, In-Memory Database Optimized for Modern Hardware](https://dicedb.io/) — A new Go-powered database! Dice is a _reactive_ database where your clients subscribe to receive changes immediately and it seems to take a lot of inspiration from the Redis approach being both in-memory and with simple Redis-like commands. [GitHub repo.](https://github.com/DiceDB/dice) 

DiceDB   

[Participle: A Simple Library for Defining Parsers](https://github.com/alecthomas/participle) — Provides a straightforward yet idiomatic way to define parsers in Go using a familiar approach of using struct field tags to define a grammar, so if you’ve used `encoding/json` before, you’re well on your way. 

Alec Thomas   

- [Glamour 0.9](https://github.com/charmbracelet/glamour/releases/tag/v0.9.0) – Stylesheet-based Markdown rendering for CLI apps, now with better syntax highlight and tables.
- [Toxiproxy 2.12](https://github.com/Shopify/toxiproxy) – Simulate 'chaotic' network conditions in both testing and development environments.
- 🐍 [Viper 1.20](https://github.com/spf13/viper/releases/tag/v1.20.0) – Config solution for Go apps supporting various file formats and environment variables.
- 📰 [Fusion 0.9](https://github.com/0x2E/fusion) – Lightweight, self-contained feed aggregator and reader. Built with Go, SQLite, and Svelte.
- [go-github v70.0.0](https://github.com/google/go-github) – Go client library for accessing the GitHub API v3.
- [River v0.19](https://github.com/riverqueue/river/releases/tag/v0.19.0) – Robust job processing system for Go and Postgres.
- [GoReleaser v2.8](https://carlosbecker.com/posts/goreleaser-v2.8) – Mostly improvements to the _Pro_ version.
- [TOML 1.5](https://github.com/BurntSushi/toml) – [TOML](https://toml.io/en/) config file parser for Go.         

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
