Generated-code reference
Generated-code reference
This page describes the code generated when compiling .proto files with protoc, using the protoc-gen-go-grpc grpc plugin. This latest version of generated code uses generics by default. If you’re working with older generated code that doesn’t use generics, you can find the relevant documentation here. While we encourage using this latest version with generics, you can temporarily revert to the old behavior by setting the useGenericStreams flag to false.
You can find out how to define a gRPC service in a .proto file in Service definition.
Thread-safety: note that client-side RPC invocations and server-side RPC handlers are thread-safe and are meant to be run on concurrent goroutines. But also note that for individual streams, incoming and outgoing data is bi-directional but serial; so e.g. individual streams do not support concurrent reads or concurrent writes (but reads are safely concurrent with writes).
Methods on generated server interfaces
On the server side, each service Bar in the .proto file results in the function:
func RegisterBarServer(s *grpc.Server, srv BarServer)
The application can define a concrete implementation of the BarServer interface and register it with a grpc.Server instance
(before starting the server instance) by using this function.
Unary methods
These methods have the following signature on the generated service interface:
Foo(context.Context, *RequestMsg) (*ResponseMsg, error)
In this context, RequestMsg is the protobuf message sent from the client, and ResponseMsg is the protobuf message sent back from the server.
Server-streaming methods
These methods have the following signature on the generated service interface:
Foo(*RequestMsg, grpc.ServerStreamingServer[*ResponseMsg]) error
In this context, RequestMsg is the single request from the client, and grpc.ServerStreamingServer represents the server side of server-to-client stream of response type ResponseMsg.
Refer to grpc.ServerStreamingServer documentation for detailed usage information.
Client-streaming methods
These methods have the following signature on the generated service interface:
Foo(grpc.ClientStreamingServer[*RequestMsg, *ResponseMsg]) error
Where RequestMsg is the message type of the stream, sent from client-to-server and ResponseMsg is the type of response from server to client.
In this context, grpc.ClientStreamingServer can be used both to read the client-to-server message stream and to send the single server response message.
Refer to grpc.ClientStreamingServer documentation for detailed usage information.
Bidi-streaming methods
These methods have the following signature on the generated service interface:
Foo(grpc.BidiStreamingServer[*RequestMsg, *ResponseMsg]) error
Where RequestMsg is the message type of the stream, sent from client-to-server and ResponseMsg is the type of stream from server-to-client.
In this context, grpc.BidiStreamingServer can be used to access both the client-to-server message stream and the server-to-client message stream.
Refer to grpc.BidiStreamingServer documentation for detailed usage information.
Methods on generated client interfaces
For client side usage, each service Bar in the .proto file also results in the function: func BarClient(cc *grpc.ClientConn) BarClient, which
returns a concrete implementation of the BarClient interface (this concrete implementation also lives in the generated .pb.go file).
Unary Methods
These methods have the following signature on the generated client stub:
(ctx context.Context, in *RequestMsg, opts ...grpc.CallOption) (*ResponseMsg, error)
In this context, RequestMsg is the single request from client to server, and ResponseMsg contains the response sent back from the server.
Server-Streaming methods
These methods have the following signature on the generated client stub:
Foo(ctx context.Context, in *RequestMsg, opts ...grpc.CallOption) (grpc.ServerStreamingClient[*ResponseMsg], error)
In this context, grpc.ServerStreamingClient represents the client side of server-to-client stream of ResponseMsg messages.
Refer to grpc.ServerStreamingClient documentation for detailed usage information.
Client-Streaming methods
These methods have the following signature on the generated client stub:
Foo(ctx context.Context, opts ...grpc.CallOption) (grpc.ClientStreamingClient[*RequestMsg, *ResponseMsg], error)
In this context, grpc.ClientStreamingClient represents the client side of client-to-server stream of RequestMsg messages. It can be used both to send the client-to-server message stream and to receive the single server response message.
Refer to grpc.ClientStreamingClient documentation for detailed usage information.
Bidi-Streaming methods
These methods have the following signature on the generated client stub:
Foo(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[*RequestMsg, *ResponseMsg], error)
In this context, grpc.BidiStreamingClient represents both the client-to-server and server-to-client message streams.
Refer to grpc.BidiStreamingClient documentation for detailed usage information.
Packages and Namespaces
When the protoc compiler is invoked with --go_out=plugins=grpc:, the proto package to Go package translation
works the same as when the protoc-gen-go plugin is used without the grpc plugin.
So, for example, if foo.proto declares itself to be in package foo, then the generated foo.pb.go file will also be in
the Go package foo.