Although this recipe omits the client, you could replicate the steps in the Understanding GRPC clients recipe from Chapter 7, Web Clients and APIs, and you should see identical results to what we see with our curls. Both the http and grpc directories make use of the same internal package. We have to be careful in this package to return appropriate GRPC error codes and to correctly map those error codes to our HTTP response. In this case, we use codes.NotFound, which we map to http.StatusNotFound. If you have to handle more than a few errors, a switch statement may make more sense than an if…else statement.
The other thing you may notice is that GRPC signatures are usually very consistent. They take a request and return an optional response and an error. It's possible to create a generic handler, shim, if your GRPC calls are repetitive enough and it also seems like it lends itself well to code generation; you may eventually see something like that with a package such as goadesign/goa.