Yesterday I wrote a shard on exploring the etcd codebase. One of the things that stood out was how the clientv3 package abstracts out the underlying gRPC machinery.
etcd is a distributed key-value store where the server and client communicate over gRPC. But
if you’ve only ever used clientv3 and never peeked into the internals, you wouldn’t know
that. You call resp, err := client.Put(ctx, "key", "value") and get back a *PutResponse.
It feels like a regular Go library. The fact that gRPC and protobuf are involved is an
implementation detail that the client wrapper keeps away from you.