---
title: "How to optimize a DNS server using Go tools"
publication: "Go Weekly"
issue: 295
published_at: "2020-01-17"
canonical_url: "https://golangweekly.com/issues/295"
---

And more Go news, links, and tutorials of the week.       

#295 — January 17, 2020 

[Read on the Web](https://golangweekly.com/issues/295)   

Golang Weekly 

[![\](https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60/v1579261752/j14eyvdki94fcgtydkkw.png)](https://www.esimov.com/2020/01/pigo-wasm)  

[Porting the Go Pigo Face Detection Library to WebAssembly](https://www.esimov.com/2020/01/pigo-wasm) — [Pigo](https://github.com/esimov/pigo) is a neat face detection library we’ve linked to a few times now, but wouldn’t it be great to use directly in the browser too? Here’s what was involved. 

Endre Simo   

[Plumbing At Scale: Event Sourcing and Stream Processing Pipelines at Grab](https://engineering.grab.com/plumbing-at-scale) — Grab is a Singapore-based food ordering app and this post digs into their journey building and deploying an event sourcing platform with Go for servicing _300 billion_ events each week. 

Karan Kamath (Grab)   [![\](https://copm.s3.amazonaws.com/4bb7308f.png)](https://www.eventbrite.com/e/3-day-ultimate-go-training-charlotte-nc-usa-january-2020-tickets-80562000111?mc_cid=838cbb9799&mc_eid=%5BUNIQID%5D) 

[Start 2020 Strong. Ultimate Go Training: Charlotte, NC - January 27-29, 2020](https://www.eventbrite.com/e/3-day-ultimate-go-training-charlotte-nc-usa-january-2020-tickets-80562000111?mc_cid=838cbb9799&mc_eid=%5BUNIQID%5D) — Take advantage of the early bird pricing and attend Bill Kennedy's Ultimate Go Training in Charlotte, North Carolina in January 2020. If you have a team of 5 or more engineers request a group discount [here](https://mailtrack.io/trace/link/b89a452e97bf014d66ab1846b9a1d982b019d5b9?url=https%3A%2F%2Fforms.gle%2FvufDbrRL9C6AU8XD9%3Fmc_cid%3D838cbb9799%26mc_eid%3D%5BUNIQID%5D&userId=2884192&signature=45cd382865411313). 

Ardan Labs sponsor   

[How We Optimized Our DNS Server using Go Tools](https://medium.com/@arash.cordi/how-we-optimized-our-dns-server-using-go-tools-d753e1a5e709) — It’s written in an idiosyncratic way but there’s a lot to enjoy here. 

Arash Cordi   

[Stream Is Deprecating Virtual Go (`vg`): It’s Time to Move to Go Modules](https://getstream.io/blog/virtual-go-to-go-modules/) — [vg](https://github.com/GetStream/vg) was a project providing ‘workplace based’ development for Go to avoid problems with dependencies clashing between multiple projects.. but Go modules now solve that problem. 

Tommaso B (Stream)  

💻 Jobs  

[Sr. Software Engineer at CrowdStrike (Remote)](https://crowdstrike.wd5.myworkdayjobs.com/crowdstrikecareers/job/USA-Remote/Sr-Software-Engineer_R3806) — CrowdStrike is the leader in cloud-delivered endpoint protection, which helps protect our customers from cybersecurity attacks. 

CrowdStrike   

[Enjoy Building Scalable Infrastructure in Go? Stream is Hiring](https://angel.co/company/stream/jobs/241159-backend-software-engineer-go) — Like coding in Go? We do too. Stream is hiring in Amsterdam. [Apply now](https://angel.co/company/stream/jobs/241159-backend-software-engineer-go). 

Stream   

[Find a Job Through Vettery](https://www.vettery.com/tech?utm_source=newsletter&utm_medium=cooper-golangweekly&utm_term=tech&utm_content=grouped&utm_campaign=ad-77582) — Vettery is completely free for job seekers. Make a profile, name your salary, and connect with hiring managers from top employers. 

Vettery  

📘 Articles & Tutorials  

[Exposing Interfaces](https://www.efekarakus.com/golang/2019/12/29/working-with-interfaces-in-go.html) — Writing good interfaces can be tricky, but there are some guidelines you can follow which this article outlines with examples. 

Efe Karakus   

▶[How GitLab Scaled Git Access with Go](https://www.infoq.com/presentations/gitlab-monolith-scale/) — A 25 minute talk on the story behind how GitLab switched from a Ruby on Rails app to using feature flags, protocol buffers, gRPC and Go. 

Oswaldo Ferreira   

[PubSub Using Channels in Go](https://eli.thegreenplace.net/2020/pubsub-using-channels-in-go/) — As with most things, there are multiple possible approaches here. Eli covers several and chooses his favorite. 

Eli Bendersky   

[Go Things I Love: Channels and Goroutines](https://www.justindfuller.com/2020/01/go-things-i-love-channels-and-goroutines/) — A quick look at a few concurrency patterns. 

Justin Fuller   

▶[Go at Heroku](https://www.heroku.com/podcasts/codeish/46-go-at-heroku) — Take a peek into how Heroku uses Go for its services, and how they teach through style guides and pairing sessions. 

Heroku sponsorpodcast   

[The 'await/async' Concurrency Pattern in Go](https://madeddu.xyz/posts/go-async-await/) — Another look at concurrency from the perspective of replicating the `await`/`async` type approach you might have used in something like Node.js. 

Matteo Madeddu   

[How Go's `net.DialContext()` Stops Things When The Context Is Cancelled](https://utcc.utoronto.ca/~cks/space/blog/programming/GoDialCancellationHow) 

Chris Siebenmann  

🛠 Code & Tools  

[BLAKE3: A Pure Go Implementation of the BLAKE3 Cryptographic Hash Function](https://github.com/lukechampine/blake3) — BLAKE3 is a Merkle-tree based cryptographic hash function ([originally implemented in Rust](https://github.com/BLAKE3-team/BLAKE3)) that’s fast, secure, and highly parallelizable. And in case you’re wondering why you’d _want_ a faster hash, [here are some ideas.](https://news.ycombinator.com/item?id=22004543) 

Luke Champine   

[sqlmw: Wrap a `database/sql` Driver with Middleware](https://github.com/ngrok/sqlmw) — Provides an abstraction similar to HTTP middleware or gRPC interceptors but for `database/sql` so you can do logging and tracing more easily. 

Alan Shreve   

[Avo: Better x86 Assembly Generation from Go](https://github.com/mmcloughlin/avo) — Avo makes assembly easier to write by using Go control structures and virtual registers, with values handled for you. The basic [adding two numbers example](https://github.com/mmcloughlin/avo/tree/master/examples/add) shows off how it works in a simple way. 

Michael McLoughlin   

[GoJSONQ: A Package to Query JSON Data](https://github.com/thedevsaddam/gojsonq) — Provide a fluent chainable API to query JSON documents. 

Saddam H   

[![\](https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60/cz4pcip25hjkypzkrvo7.jpg)](https://github.com/guptarohit/asciigraph)   

[asciigraph: Make Lightweight ASCII Line Graphs](https://github.com/guptarohit/asciigraph) — We’ve linked this a few times over the years, but I still love the output from this package and it continues to get updates from time to time. 

Rohit Gupta   

[Aini: Go Library for Parsing Ansible Inventory Files](https://github.com/relex/aini) 

Relex   

[Fault Tolerant Job Scheduling System for Cloud Native Environments](https://dkron.io/) 

dkron.io sponsor   

[ok-zoomer: Turn Portraits Into Zooming Animated GIFs](https://github.com/jbirms/ok-zoomer) — Finds a face in an image using Pigo then zooms in and out of that face and turns the result into an animated GIF. Got it? 😂 

Justin Birmingham   

[zero-width: Zero-Width Character Detection and Removal](https://github.com/trubitsyn/go-zero-width) — Things like zero width spaces in strings can cause [all sorts of headaches.](https://medium.com/@umpox/be-careful-what-you-copy-invisibly-inserting-usernames-into-text-with-zero-width-characters-18b4e6f17b66) 

Nikola Trubitsyn         

Curated by [Glenn Goodrich](https://twitter.com/ruprict) and [Peter Cooper](https://twitter.com/peterc). 

[Change your email address](https://golangweekly.com/edit_subscription/*|UID|*) or[Stop getting this newsletter](https://golangweekly.com/leave/*|UID|*) 

© Cooper Press Ltd · Fairfield Enterprise Centre, Louth, LN11 0LS, United Kingdom
