gRPC is an excellent, modern IDL and transport for microservices. If you're starting a greenfield project, go-kit strongly recommends gRPC as your default transport.
One important note is that while gRPC supports streaming requests and replies, go-kit does not. You can still use streams in your service, but their implementation will not be able to take advantage of many go-kit features like middleware.
Using gRPC and go-kit together is very simple.
Next, get the protoc compiler.
You can download pre-compiled binaries from the
protobuf release page.
You will unzip a folder called
protoc3 with a subdirectory
an executable. Move that executable somewhere in your
$PATH and you're good
It can also be built from source.
brew install autoconf automake libtool git clone https://github.com/google/protobuf cd protobuf ./autogen.sh ; ./configure ; make ; make install
Then, compile your service definition, from .proto to .go.
protoc add.proto --go_out=plugins=grpc:.
Finally, write a tiny binding from your service definition to the gRPC definition. It's a simple conversion from one domain to another. See grpc_binding.go for an example.
That's it! The gRPC binding can be bound to a listener and serve normal gRPC requests. And within your service, you can use standard go-kit components and idioms. See addsvc for a complete working example with gRPC support. And remember: go-kit services can support multiple transports simultaneously.