协议 --go_opt=paths=source_relative 与 --go-grpc_opt=paths=source_relative

Chr*_* G. 15 go protoc grpc-go

我很难弄清楚protoc命令和 go 插件。

两者有什么不同:

protoc \
   # Directory where you want the compiler to write your Go output.
   --go_out=.
   # vs ?
   --go_opt=paths=source_relative
   # vs ?
   --go-grpc_out=.
   # vs ?
   --go-grpc_opt=paths=source_relative
Run Code Online (Sandbox Code Playgroud)

如果--go_opt生成

  • <name>.pb.go文件

--go-grpc_opt生成

  • <name>_grpc.pb.go文件

为什么甚至有--go_out

你能解释一下 protoc -文档没有说什么吗--go-grpc_opt

并且甚至protoc -h不将 go 列为 OUT_DIR?

注意:我使用此文档安装

Clé*_*ean 16

为什么还要--go_out?

因此,这里需要理解的是,gRPC 与 Protocol Buffers 不同,gRPC 使用 Protocol Buffers,但还有其他框架也在使用它们。所以我们需要生成两者。

现在,为了生成 Protocol buffer 相关代码,您需要--go_out按照您提到的方式使用。但对于 gRPC 代码,您需要使用--go-grpc_out.

和 --go-grpc_opt 生成 _grpc.pb.go 文件

不,--go-grpc_out确实如此。

您能否对协议进行一些说明 - 该文档不会保留有关 --go-grpc_opt 的任何内容?

然后,在生成代码之前,您可以传递一些选项,这就是--go_opt和 的--go-grpc_opt用途。第一个传递 Protobuf 生成选项,第二个传递 gRPC 生成选项。选项非常模糊,并且没有所有选项的官方列表,但是您使用source_relative(告诉 protoc 使用相对路径)作为路径,并且还有选项module(帮助 protoc 知道要在正确的文件夹中生成的 go 模块名称) )

而且 protoc -h 甚至没有将 go 列为 OUT_DIR?

最后,protoc 并不正式支持 Go 作为输出,您需要安装外部插件,这就是为什么protoc -h不显示--go_out. 相关讨论可以在这里找到。