Grpc使用buf.build 快速编译
本文通过实例来讲解使用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文件
如果在用的过程中有问题,可以随时私信我
转载时请注明原文地址,谢谢
推荐阅读
用golang的channel特性,来做简易分拣机的中控部分
先介绍一下项目的背景,之前单位有一个做小型快递分拣机的需求,针对小型包裹智能分拣到不通的出口。大致的物理传送带如下方图所示,原谅我不会画图。此文章的目的,只是给大家展示一下golang channel的用处。
这个名字好长阅读 347
前端如何入门 Go 语言
类比法是一种学习方法,它是通过将新知识与已知知识进行比较,从而加深对新知识的理解。在学习 Go 语言的过程中,我发现,通过类比已有的前端知识,可以更好地理解 Go 语言的特性。
robin赞 23阅读 3.2k评论 6
Golang 中 []byte 与 string 转换
string 类型和 []byte 类型是我们编程时最常使用到的数据结构。本文将探讨两者之间的转换方式,通过分析它们之间的内在联系来拨开迷雾。
机器铃砍菜刀赞 24阅读 57.9k评论 2
年度最佳【golang】map详解
这篇文章主要讲 map 的赋值、删除、查询、扩容的具体执行过程,仍然是从底层的角度展开。结合源码,看完本文一定会彻底明白 map 底层原理。
去去1002赞 16阅读 11.5k评论 2
年度最佳【golang】GMP调度详解
Golang最大的特色可以说是协程(goroutine)了, 协程让本来很复杂的异步编程变得简单, 让程序员不再需要面对回调地狱, 虽然现在引入了协程的语言越来越多, 但go中的协程仍然是实现的是最彻底的. 这篇文章将通过分析...
去去1002赞 15阅读 11.9k评论 4
万字详解,吃透 MongoDB!
MongoDB 是一个基于 分布式文件存储 的开源 NoSQL 数据库系统,由 C++ 编写的。MongoDB 提供了 面向文档 的存储方式,操作起来比较简单和容易,支持“无模式”的数据建模,可以存储比较复杂的数据类型,是一款非常...
JavaGuide赞 8阅读 1.6k
数据结构与算法:二分查找
一、常见数据结构简单数据结构(必须理解和掌握)有序数据结构:栈、队列、链表。有序数据结构省空间(储存空间小)无序数据结构:集合、字典、散列表,无序数据结构省时间(读取时间快)复杂数据结构树、 堆图二...
白鲸鱼赞 9阅读 5.2k
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。