使用 buf 替代 protoc 生成和管理代码
编辑于 2022-10-26 17:57:51 阅读 1966
以go为例,下面是所需工具
工具 | 介绍 | 安装 |
---|---|---|
protobuf | protoc 可执行文件 | Install |
protoc-gen-go | 从 proto 文件,生成 .go 文件 | Install |
protoc-gen-go-grpc | 从 proto 文件,生成 GRPC 相关的 .go 文件 | Install |
protoc-gen-grpc-gateway | 从 proto 文件,生成 grpc-gateway 相关的 .go 文件 | Install |
protoc-gen-openapiv2 | 从 proto 文件,生成 swagger 所需的json文件 | Install |
buf出现之前
buf出现之前,我们只能使用protoc,配合一堆参数来生成代码
cuiwei@weideMacBook-Pro protobuf % protoc --go_out=. --go-grpc_out=require_unimplemented_servers=false:. ./helloworld.proto
cuiwei@weideMacBook-Pro protobuf % protoc -I . --grpc-gateway_out ../gen \
--grpc-gateway_opt logtostderr=true \
--grpc-gateway_opt paths=source_relative \
--grpc-gateway_opt generate_unbound_methods=true \
helloworld.proto
buf 的使用
安装
//macOS
brew install bufbuild/buf/buf
登陆 Buf Schema Registry (BSR)
在此之前,确保你已经创建了API令牌
cuiwei@weideMacBook-Pro ent-serve % buf registry login
cuiwei@weideMacBook-Pro ~ % cat ~/.netrc
machine buf.build
login cuiwei
password 95b5be604e7f44eaaa48c031756da4c63547b8d7b21849e6b0f。。。
machine go.buf.build
login cuiwei
password 95b5be604e7f44eaaa48c031756da4c63547b8d7b21849e6b0f。。。
创建blog模块,或者在网站后台添加
cuiwei@weideMacBook-Pro ent-serve % buf beta registry repository create buf.build/cuiwei/blog --visibility public
推送模块
cuiwei@weideMacBook-Pro ent-serve % cd blogapis
cuiwei@weideMacBook-Pro ent-serve % ls blogapis
blog buf.md buf.yaml
cuiwei@weideMacBook-Pro blogapis % buf push
此模块已公开,欢迎使用:https://buf.build/cuiwei/blog
创建buf.gen.yaml文件
version: v1
managed:
enabled: true
go_package_prefix:
default: ent/gen/proto/go
plugins:
- name: go
out: gen/proto/go
opt: paths=source_relative
- name: go-grpc
out: gen/proto/go
opt:
- paths=source_relative
- require_unimplemented_servers=false
创建buf.work.yaml文件
version: v1
directories:
- blogapis
生成代码
确保已创建了buf.gen.yaml文件
cuiwei@weideMacBook-Pro ent-serve % buf generate
cuiwei@weideMacBook-Pro ent-serve % tree gen
gen
└── proto
└── go
└── admin
└── v1
├── admin.pb.go
├── article.pb.go
├── error.pb.go
├── service.pb.go
└── service_grpc.pb.go
4 directories, 5 files
远程生成
首先,在您使用go get
请求Go代码存根之前,不会生成Go代码存
go get go.buf.build/grpc/go/cuiwei/blog
其次,修改import
import (
- blogv1 "enterprise-api/gen/proto/go/blog/v1"
+ blogv1 "go.buf.build/grpc/go/cuiwei/blog/admin/v1"
)
如果需要更新,可以修改go.mod中的版本号
参考
https://docs.buf.build/tour/introduction
https://docs.buf.build/tour/use-remote-generation
https://blog.csdn.net/pointgoal_io/article/details/120500504