安装代码生成工具
安装 Protocol buffer 编译器
这里直接使用预编译好的二进制文件,直接去仓储的 Release 地址下载。
把下载下来的文件放到目录中,并在环境变量中添加该目录,目的是为了可以自由的在 cli 下访问该命令文件。
protoc 命令跟具体编程语言无关。
下面 PB 特指 Protocol Buffers。
安装生成 Go 代码的 PB 插件
这里直接通过 Go 自身安装,安装后的文件存储在 GOPATH/bin
目录下,可以使用 go env
来确认具体是哪个目录。
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
这里同样需要把 GOPATH/bin
目录添加到系统环境变量中,以方便命令行读取。
注意不要修改文件的名称。protoc 通过 protoc-gen-
前缀来查找插件。
生成 Go 代码
使用以下命令生成 Go 代码:
protoc --go_out=./spec --go-grpc_out=./spec --go-grpc_opt=require_unimplemented_servers=false proto/hello.proto
注意在编写 proto 文件时添加 option go_package = "./;spec";
这一行,来指定生成代码所在的包。
命令选项说明
--go_out
其中的 go 代表要生成 go 语言的代码,out 则指输出目录(上面的例子是输出到 spec 目录下),protoc
命令会根据_out
前缀来查找编程语言插件(这里就会找到protoc-gen-go
这个插件)。这条命令最终会生成*.pb.go
文件,主要是 proto 文件中的 message。--go-grpc_out
命令组成同--go_out
,主要用来生成 proto 文件中的方法代码。GRPC 相关代码存根。--go-grpc_opt=require_unimplemented_servers=false
用来指示在生成 grpc 代码时的附加选项,其中require_unimplemented_servers=false
选项指示在生成 Go 接口代码时不生成 mustEmbedUmimplementedxxx 方法(此方法为了旧版本的兼容性问题)
在不加require_unimplemented_servers=false
选项时,生成的 Go 接口,在重写的时候必须要内嵌Unimplementedxxx
结构体,否则会出现未实现接口的警告。
参考资料
本文由 waynelone 创作,采用 知识共享署名4.0 国际许可协议进行许可。
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。