---
title: "A New Go API for Protocol Buffers"
publication: "Go Weekly"
issue: 302
published_at: "2020-03-06"
canonical_url: "https://golangweekly.com/issues/302"
---

Plus more Go news, links, tutorials, and projects of the week.       

#302 — March 6, 2020 

[Unsubscribe](https://golangweekly.com/leave/*|UID|*):[Read on the Web](https://golangweekly.com/issues/302)   

Golang Weekly 

[![\](https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60/pykrhpak8nppnzbr8otr.jpg)](https://fasterthanli.me/blog/2020/i-want-off-mr-golangs-wild-ride/)   

[I Want Off Mr. Golang's Wild Ride](https://fasterthanli.me/blog/2020/i-want-off-mr-golangs-wild-ride/) — Well, not everyone loves Go. This is a very detailed.. rant that goes beyond generics and takes issue with the idea that Go is simple. Worth a read, as things like this can help us flesh out our own opinions and figure out just why we _do_ love Go. 

Amos Wenger   

[A New Go API for Protocol Buffers](https://blog.golang.org/a-new-go-api-for-protocol-buffers) — Reflecting (ha!) on some of the things missing from version 1, v2 has a reflection API and a new import path. It’s a breaking change, but there is a version of 1 that is backed by 2 so you can upgrade gradually. 

Tsai, Neil, and Ong   [![\](https://copm.s3.amazonaws.com/67278539.png)](https://www.ardanlabs.com/training/?utm_source=Cooperpress%20Primary) 

[Do You Need Go, Docker or Kubernetes Training?](https://www.ardanlabs.com/training/?utm_source=Cooperpress%20Primary) — We offer on-site corporate training for engineers that want to learn Go, Docker and/or Kubernetes. Having trained over 5,000 engineers, we have carefully crafted these classes for students to get as much value as possible. 

ArdanLabs sponsor   

[Is Go Duck-Typed?](https://bionic.fullstory.com/is-go-duck-typed/) — I hate to be a spoiler here, but the answer is “kinda.” Maybe we should call Go’s version “Gopher Typing”. The analysis is worth the read, though. 

FullStory   

[How to Find Goroutines During Debugging](https://blog.jetbrains.com/go/2020/03/03/how-to-find-goroutines-during-debugging/) — If you have a ton of goroutines, you can use new features in GoLand or delve to add custom labels to them, making them easy to find in a debugging session. 

Florin Pățan  

💻 Jobs  

[Software Engineer / Founding Teammate (Remote OK)](http://jobs.numo.com/apply/Upa7HJyDq1/Software-Engineer-Founding-Teammate-Markup-Remote-Or-Onsite) — A well funded, fast-moving startup that is changing the way large teams collaborate on documents. Think: GitHub for documents. 

Markup   

[Golang Developer at X-Team (Remote)](https://x-team.com/remote-go-developer-jobs/?utm_source=cooperpress&utm_medium=email-ad&utm_campaign=go) — Work with the world's leading brands, from anywhere. Travel the world while being part of the most energizing community of developers. 

X-Team   

[Find a Dev 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  

[How to Use Git History to Identify Pain Points in a Project?](https://preslav.me/2020/03/01/use-the-git-history/) — The basic idea is that files that change often tend to be the ones where most issues occur. 

Preslav Rachev   

[Track Latency and More in Go Apps to Quickly Optimize Performance](https://www.datadoghq.com/dg/apm/go-troubleshooting/?utm_source=Advertisement&utm_medium=CooperPress&utm_campaign=CooperPress-GoWeeklyTroubleshootingS) — Trace requests across service boundaries end-to-end to identify bottlenecks and other potential errors. Try Datadog APM. 

Datadog sponsor   

[Building a Terminal Dashboard in 300 Lines of Go](https://t.co/icquMGZeXl) — This uses `runtime.MemStats` to create a colorful, live dashboard and shows (again) how amazing Go can be with just a bit of code. 

Che Dan   

[What Versions of Go Support Which OpenBSD Releases](https://utcc.utoronto.ca/~cks/space/blog/programming/GoWhatOpenBSDs-2020-03) — The audience for this is _tiny_ but such obscure knowledge may be useful, especially if you’re an OpenBSD user! And if you _are_, you may also appreciate Chris’s post on [the situation with Go on OpenBSD.](https://utcc.utoronto.ca/~cks/space/blog/programming/GoOpenBSDSituation) 

Chris Siebenmann   

[Implementing Raft: Part 3 - Persistence and Optimizations](https://eli.thegreenplace.net/2020/implementing-raft-part-3-persistence-and-optimizations/) — The third in a series of posts describing the implementation of the Raft consensus algorithm in Go. 

Eli Bendersky   

[Interacting with a GraphQL API from Go](https://www.thepolyglotdeveloper.com/2020/02/interacting-with-a-graphql-api-with-golang/) — Learn the basics of consuming data from a GraphQL API using Go and simple HTTP requests. 

Nic Raboy   

[Interning Strings in Go](https://commaok.xyz/post/intern-strings/) — Interning strings is a method of storing each unique string and reusing it instead of making new copies, which may sound desirable but could actually hurt performance. 

Josh Bleecher Snyder  

🛠 Code & Tools  

[dque: A Fast, Embedded, Durable Queue](https://github.com/joncrlsn/dque) — The just-released version 2.2 includes a blocking dequeue method to wait until something is added to a queue. 

Jon Carlson   

[goxygen: Generate a Go and MongoDB-Backed JS Project in Seconds](https://github.com/Shpota/goxygen) — We only first linked this opinionated full stack app generator a few weeks ago, but since then it’s had a 0.2 version that extends its support from React to Angular and Vue.js too. 

Sasha Shpota   

[Genji: A Document-Oriented, Embedded SQL Database](https://github.com/asdine/genji) — Works with Bolt, Badger and memory and also with `database/sql`. 

Asdine El Hrychy   

[The Ultimate Guide to Container Formats: Decrypting Video Technologies](https://go.bitmovin.com/ultimate-guide-container-formats?utm_source=cooper-go-brief-link&utm_medium=paid-newsletter&utm_campaign=container-formats) 

Bitmovin Inc. sponsor   

[⚠️ Monkey: Arbitrary Monkey Patching in Go](https://github.com/bouk/monkey) — Billed as a fun experiment, this rewrites executables _at runtime_ and inserts jumps to redirect where things go. This is very unsafe, do not use it for anything beyond fun 😂 Even the project’s [license](https://github.com/bouk/monkey/blob/master/LICENSE.md) says _“Don’t use it.”_ 

Bouke van der Bijl   

[Gonum 0.7: Numeric Libraries for Go](https://github.com/gonum/gonum) — Covers matrices, statistics, optimization, etc. We first linked this two years ago but it continues to get updates. 

Gonum Team   

[goukv: An Abstraction Layer for Key-Value Stores](https://github.com/alash3al/goukv) — Currently supports BadgerDB and GolevelDB. 

Mohammed Al Ashaal   

[go-imap 1.0.4: An IMAP4 Library for Clients and Servers](https://github.com/emersion/go-imap) 

Simon Ser         

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
