生成的代码参考
该页面描述了在使用 protoc-gen-go-grpc grpc 插件 编译 .proto
文件时生成的代码。此版本的生成代码默认使用泛型。如果您正在使用不支持泛型的旧版生成代码,可以在 此处 找到相关文档。虽然我们鼓励使用带泛型的最新版本,但您可以通过将 useGenericStreams
标志设置为 false
来暂时恢复旧行为。
有关如何在 .proto
文件中定义 gRPC 服务的信息,请参见 服务定义。
线程安全:请注意,客户端 RPC 调用和服务器端 RPC 处理程序是线程安全的,旨在并发 goroutine 上运行。但也要注意,对于单独的流,进出数据是双向的但为串行的;例如,单独的流不支持并发读取或并发写入(但读取与写入是线程安全并发的)。
生成的服务器接口方法
在服务器端,.proto
文件中的每个 service Bar
都会生成以下函数:
func RegisterBarServer(s *grpc.Server, srv BarServer)
应用程序可以定义一个 BarServer
接口的具体实现,并使用该函数将其注册到 grpc.Server
实例中(在启动服务器实例之前)。
一元方法
这些方法在生成的服务接口中的签名如下:
Foo(context.Context, *RequestMsg) (*ResponseMsg, error)
在这里,RequestMsg
是从客户端发送的 protobuf 消息,ResponseMsg
是从服务器返回的 protobuf 消息。
服务器流方法
这些方法在生成的服务接口中的签名如下:
Foo(*RequestMsg, grpc.ServerStreamingServer[*ResponseMsg]) error
在这里,RequestMsg
是客户端发送的单个请求,https://pkg.go.dev/google.golang.org/grpc#ServerStreamingServer[grpc.ServerStreamingServer] 表示服务器端到客户端的响应流,流的消息类型为 ResponseMsg
。
有关详细使用信息,请参见 grpc.ServerStreamingServer 文档。
生成的客户端接口方法
对于客户端使用,.proto 文件中的每个服务 Bar
还会生成以下函数:
func BarClient(cc *grpc.ClientConn) BarClient
此函数返回 BarClient
接口的具体实现(该实现也位于生成的 .pb.go
文件中)。
一元方法
这些方法在生成的客户端存根中的签名如下:
(ctx context.Context, in *RequestMsg, opts ...grpc.CallOption) (*ResponseMsg, error)
在这里,RequestMsg
是客户端发送到服务器的单个请求,ResponseMsg
是从服务器返回的响应消息。
服务器流方法
这些方法在生成的客户端存根中的签名如下:
Foo(ctx context.Context, in *RequestMsg, opts ...grpc.CallOption) (grpc.ServerStreamingClient[*ResponseMsg], error)
在这里,grpc.ServerStreamingClient
表示服务器到客户端的响应流,消息类型为 ResponseMsg
。
有关详细使用信息,请参见 grpc.ServerStreamingClient
文档。