本文通过实例来讲解使用buf来快速的编译proto文件,不需要再用protoc命令加各种参数来编译proto文件。
事先需要安装buf, 安装方法请参考官网installation
- 我们先建立目录结构
- auth.proto
syntax = "proto3";
option go_package ="trade/auth/pb/proto/go/auth/v1;authV1";
package auth.v1;
message LoginRequest {
string username = 1;
string password = 2;
}
message LoginResponse {
string access_token = 1;
int32 expires_in = 2;
}
service AuthService {
rpc Login (LoginRequest) returns (LoginResponse);
}
- 进入proto文件夹,执行buf mod init
cd trade/apps/auth/pb/proto
buf mod init
- 进入上级pb文件夹 添加buf.gen.yaml文件
buf.gen.yaml的配置,此处用到的plugin是本地形式的,请提前装好红框里的插件
怎么装,请自行百度,如果有疑问可以私信我。
# buf.gen.yaml
version: v1
plugins:
- plugin: go
out: gen/proto/go
opt: paths=source_relative
- plugin: go-grpc
out: gen/proto/go
opt: paths=source_relative
- 输入命令 buf generate 进行编译,生成grpc的代码
buf generate
- 如果需要生成grpc-gateway的代码,请继续向下看
- 在pb目录下创建一个auth.yaml
type: google.api.Service
config_version: 3
http:
rules:
- selector: auth.v1.AuthService.Login
post: "/v1/login"
body: "*"
- 修改buf.gen.yaml,添加grpc-gateway插件,并指定http接口规则的文件为auth.yaml
- plugin: grpc-gateway
out: gen/proto/go
opt:
- paths=source_relative
- grpc_api_configuration=auth.yaml
- 重新执行 buf generate 进行编译,生成proto文件对应的gw文件
- 如果需要使用第三方的validate组件,如:protoc-gen-validate
- 修改buf, 添加deps
version: v1
deps:
- buf.build/envoyproxy/protoc-gen-validate
breaking:
use:
- FILE
lint:
use:
- DEFAULT
- 进入proto目录 执行buf mod update 锁定对应的版本号
执行完命令后会多出一个buf.lock的文件
当然也可以手动写死版本号 例如:
deps:
- buf.build/envoyproxy/protoc-gen-validate:6607b10f00ed4a3d98f906807131c44a
- 修改auth.proto文件
- 修改 buf.gen.yaml 添加 validate的plugin
- 在pb文件下创建 buf.work.yaml,定义一个工作区,可以使得auth.proto文件直接导入deps的proto文件
version: v1
directories:
- proto
- 重新执行 buf generate 进行编译,生成proto文件对应的validate文件
如果在用的过程中有问题,可以随时私信我
转载时请注明原文地址,谢谢