本文通过实例来解说应用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/protobuf mod init
- 进入下级pb文件夹 增加buf.gen.yaml文件
buf.gen.yaml的配置,此处用到的plugin是本地模式的,请提前装好红框里的插件
怎么装,请自行百度,如果有疑难能够私信我。
# buf.gen.yamlversion: v1plugins: - 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.Serviceconfig_version: 3http: 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: v1deps: - buf.build/envoyproxy/protoc-gen-validatebreaking: use: - FILElint: 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: v1directories: - proto
- 从新执行 buf generate 进行编译,生成proto文件对应的validate文件
如果在用的过程中有问题,能够随时私信我
转载时请注明原文地址,谢谢