---
title: "Let's build a distributed K/V store in Go"
publication: "Go Weekly"
issue: 462
published_at: "2023-05-30"
canonical_url: "https://golangweekly.com/issues/462"
---

Plus PayPal's Go-powered database, a fluent HTTP client library, and Mario makes an appearance. |        

#​462 — May 30, 2023 

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

Together with [![Ardan Labs\](https://res.cloudinary.com/cpress/image/upload/e_make_transparent/co_white,e_outline:7,q_auto/uf5bdgdgdbgcbdrzi6r7.png)](https://www.ardanlabs.com/consulting/?utm_source=cooperpress)  

Go Weekly 

[![\](https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/i5tpfdmxung264vzkw59.jpg)](https://notes.eatonphil.com/2023-05-25-raft.html)  

[Implementing a Distributed Key-Value Store in Go](https://notes.eatonphil.com/2023-05-25-raft.html) — Phil has spent many months getting up to speed with the [Raft consensus algorithm](https://en.wikipedia.org/wiki/Raft_%28algorithm%29) and goes into serious depth on using it along with Go as the basis for a distributed key-value store. There’s much to enjoy here. 

Phil Eaton   

[Finding the Best Go Project Structure](https://avivcarmi.com/finding-the-best-go-project-structure-part-1/) — Posts like this always do well because so many folks are uncertain about project structure. It paints the broad picture of how one team found peace with structuring their projects. [Go Project Structure](https://github.com/PerimeterX/go-project-structure) is a repo showing off their end result. 

Aviv Carmi   [![\](https://copm.s3.amazonaws.com/bcc68a3c.png)](https://www.ardanlabs.com/consulting/?utm_source=cooperpress) 

[Go! Experts at Your Service](https://www.ardanlabs.com/consulting/?utm_source=cooperpress) — Do you need help filling skill gaps, speeding up development & creating high performing software with Go, Docker, K8s, Terraform and Rust? We’ll help you maximize your architecture, structure, tech-debt and human capital. 

Ardan Labs Consulting sponsor   

[AWS SDK for Go to Align with Go Release Policy](https://aws.amazon.com/blogs/developer/aws-sdk-for-go-aligns-with-go-release-policy-on-supported-runtimes/) — Starting later this year, the AWS SDK for Go will conform to Go's release policy by supporting the two latest generally available versions, with an extra six months added for good measure. This means Go 1.19 will be supported till February 2024, 1.20 till August 2024, and so on. 

Aaron Todd (AWS)   

**IN BRIEF:** 

- PayPal has [open-sourced JunoDB](https://medium.com/paypal-tech/unlocking-the-power-of-junodb-paypals-key-value-store-goes-open-source-ee85f935bdc1), a Go-powered key-value store that PayPal uses internally at scale.
- It's a bit of a mixed bag, but [grank.io](https://www.grank.io/) is an interesting ranking of Go packages by a PageRank-like measure.
- The [▶️ latest episode of Go Time](https://changelog.com/gotime/277) tackles giving a good technical talk.
- It's early days, but there are some [draft release notes for Go 1.21.](https://tip.golang.org/doc/go1.21) We await its final release in August.    

[How to Include Git Version Information in Go Apps](https://blog.carlmjohnson.net/post/2023/golang-git-hash-how-to/) — In short, you import [this `versioninfo` package](https://github.com/carlmjohnson/versioninfo) and it does the rest – you then get access to the git revision information within your program. 

Carl M Johnson   

[Companies Spend 4.5 Trillion Dollars on IT Annually](https://retool.com/reports/state-of-internal-tools-2023/?utm_medium=newsletter&utm_source=sponsor&utm_campaign=golang) — Find out how they’re building internal tools to increase developer productivity & impact. Explore Retool’s 2023 State of Internal Tools report. 

Retool sponsor   

[Breaking SHA256: Length Extension Attacks in Practice](https://kerkour.com/sha256-length-extension-attacks) 
Sylvain Kerkour  

🛠 Code & Tools 

[![\](https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/ibpyn6uojcxgvswlx61z.jpg)](https://github.com/carlmjohnson/requests)  

[Requests: A Fluent HTTP Client Library](https://github.com/carlmjohnson/requests) — [_"Why I wrote my own Go HTTP client"_](https://blog.carlmjohnson.net/post/2021/requests-golang-http-client/) goes into more depth as to its motivations, but the [latest release](https://github.com/carlmjohnson/requests/releases/tag/v0.23.4) adds support for XML bodies, responses and errors, as well as setting multiple params and headers at once. 

Carl M Johnson   

[ls-lint 2.0: A Fast File and Directory Name Linter](https://github.com/loeffel-io/ls-lint) — Written in Go but aimed at JS/front-end dev use cases, `ls-lint` provides a way to enforce rules for file naming and directory structures. 

Lucas Löffel   

[html-to-markdown 1.4: Convert HTML to Markdown](https://github.com/JohannesKaufmann/html-to-markdown) — Actually parses HTML rather than just using regexes so can handle a lot of edge cases regexes can’t. The author also tells us the project just turned five years old! :-) 

Johannes Kaufmann   

[Simplify Access to Your Kubernetes Clusters with Teleport Team](https://goteleport.com/signup/?utm_campaign=0530TeleportTeam&utm_medium=partner&utm_source=golang) — Centrally manage Kubernetes access using identity rather than shared secrets across all environments. 

Teleport | goteleport․com sponsor   

[Joker 1.1: A Small Interpreted Dialect of Clojure Written in Go](https://joker-lang.org/) — A small interpreter, linter and formatter for the popular Lisp dialect. 

Roman Bataev   

[Gut: Convert Go Structs to TypeScript Interfaces](https://github.com/tompston/gut) — [Tygo](https://github.com/gzuidhof/tygo) is a similar but more established project if you want options. 

tompston   

- [Beego 2.1](https://github.com/beego/beego) – Web framework for Go.
- [Maddy 0.7](https://github.com/foxcpp/maddy) – All-in-one mail server.
- [Gobot 2.1](https://github.com/hybridgroup/gobot) – Robotics and IoT framework.
- [quic-go 0.35](https://github.com/quic-go/quic-go) – Pure Go QUIC implementation.
- [ftp 0.2](https://github.com/jlaffaye/ftp) – FTP client package.    

Jobs  

[Join the Gno.land Team](https://docs.google.com/forms/d/e/1FAIpQLSexAk7JObOd6FSQXm6Qx91DXYKCgqo65NXdRIZXn6-EatL4Ew/viewform) — Get to gno us! Sign up for a Q&A with our team to learn about joining Gno.land and building the next-gen smart contract platform. 
Gno.land   

[Find a Job Through Hired](https://hired.com/join/?utm_source=newsletter&utm_medium=sponsor&utm_campaign=%28b2c%29%28l-all%29%28r-all%29%28cooper-golangweekly%29&utm_content=find-your-next-job) — 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](https://booking.cooperpress.com/jobs)_.   

👾 It's-a-me, Mari-Go! 

[![\](https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/abibhu3p2wbb2adcw2rm.jpg)](https://github.com/maxpoletaev/dendy)  

[Dendy: An Expermimental NES Emulator Written in Go](https://github.com/maxpoletaev/dendy) — Like many of the most interesting projects, _“it serves no practical purpose other than to be a toy project for me”_ but it’s well put together and, surprisingly, runs quite a few real games. Perhaps a project to be inspired by if you have similar emulation development ambitions. 

Max Poletaev         

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
