一、proto文件名命名规范

包名.服务名.proto

二、proto语法

  • 关键字
syntax #协议类型,目前有两套协议 proto3、proto2,推荐使用proto3,必须放在proto文件的第一行
package #包名,必须第二行
service #定义这个proto文件的方法集合,类似于方法接口
message #类似于go语言的结构体,在此定义方法的接收、返回参数
returns #返回响应,结合service使用
rpc #定义方法的关键字,结合service使用
  • 变量类型
  • 字段序号
  • 字段操作选项
optional #结合message使用,表示message字段的内容选填,可以传也可以不传
repeated #结合message使用,表示该字段接收或返回为数组

三、实例

# 创建文件 protos/server.hello.proto
syntax = "proto3";
package user ;service HelloService {rpc SayHello (HelloRequest) returns (HelloResponse){}
}message HelloRequest {}message HelloResponse {string msg = 1;
}

编译

# 需要进入到protos文件路径下执行命令,将proto文件翻译成go识别的代码
protoc --go_out=plugins=grpc:. server.hello.proto

服务端实例

# 创建文件 impl/helloServerImpl.go
package implimport ("context"user "grpc.zozoo.net/protos"
)type (HelloService struct {}
)func (h *HelloService) SayHello(ctx context.Context, req *user.HelloRequest) (*user.HelloResponse, error) {return &user.HelloResponse{Msg: "你好,世界",}, nil
}
# 创建文件 server.go
package mainimport ("flag""fmt""google.golang.org/grpc"user "grpc.zozoo.net/protos""log""net""grpc.zozoo.net/impl"
)func main()  {flag.Parse()lis, err := net.Listen("tcp", fmt.Sprintf(":%d", 9000))if err != nil {log.Fatalf("failed to listen: %v", err)}log.Println("端口监听成功:9000")grpcServer := grpc.NewServer()user.RegisterHelloServiceServer(grpcServer, &impl.HelloService{})grpcServer.Serve(lis)
}

客户端代码

# 创建client.gopackage mainimport ("context""google.golang.org/grpc"user "grpc.zozoo.net/protos""log"
)func main() {conn, err := grpc.Dial(":9000",grpc.WithInsecure())if err != nil {log.Fatalf("failed to listen: %v", err)}//调用rpc方法hello := user.NewHelloServiceClient(conn)rsp,err := hello.SayHello(context.TODO(),&user.HelloRequest{})if err != nil {log.Fatalf("方法调用失败 err  %v", err)}log.Println(rsp.Msg)defer conn.Close()
}

proto文件定义及参数说明相关推荐

  1. 【Protobuf】Protobuf下载安装和.proto文件定义

    Protobuf是Google开源的一个项目,博主将会在几篇博文中对其进行讲解. 序列化和反序列化 有些时候,我们希望将对象保存到文件中,或者传输给其他的应用程序.比如:web网页后端和前端的数据交互 ...

  2. 深入理解 gRPC 协议--理解protobuf/.proto/http2

    RPC 无非是做两件事情:一是数据编码,二是请求映射. 1. 数据编码–protobuf vs json 数据编码顾名思义就是在将请求的内存对像转化成可以传输的字节流发给服务端,并将收到的字节流再转化 ...

  3. 百度Apollo6.0中Overlap.proto每个字段的含义

    好的,我来为您解释一下Overlap.proto文件中的每个字段的含义. Overlap.proto文件是Apollo自动驾驶平台中定义道路地图信息的Protocol Buffer文件.Protoco ...

  4. java类到proto定义转换工具

    使用情景,开发时,mybatis可以generator生成对应的实体类,可是实体类到proto定义还是需要自己实现,写一个转换工具便于开发,需要输出到文件请自行拓展 ,默认 生成的proto文件定义加 ...

  5. RPC 笔记(03)— gRPC 概念、安装、编译、客户端和服务端示例

    1. gRPC 概念 gRPC 是 Google 开源的一款高性能的 RPC 框架.GitHub 上介绍如下: gRPC is a modern, open source, high-performa ...

  6. Protocol Buffers简明教程

    随着微服务架构的流行,RPC框架渐渐地成为服务框架的一个重要部分.在很多RPC的设计中,都采用了高性能的编解码技术,Protocol Buffers就属于其中的佼佼者.Protocol Buffers ...

  7. google ProtoBuf开发者指南

    目录 1   概览 1.1   什么是protocol buffer 1.2   他们如何工作 1.3   为什么不用XML? 1.4   听起来像是为我的解决方案,如何开始? 1.5   一点历史 ...

  8. 【C++】Google Protocol Buffer(protobuf)详解(一)

    1.简介 Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准, Protocol Buffers 是一种轻便高效的结构化数据存储格式 ...

  9. 使用CSharp编写Google Protobuf插件

    什么是 Google Protocol Buffer? Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 ...

最新文章

  1. vue-cli3环境变量与分环境打包
  2. svm对未知数据的分类_基于SVM的高维不平衡数据分类方法与流程
  3. HTML DOCTYPE 的重要性
  4. OO实现ALV TABLE 八:ALV的布局功能
  5. #ps –ef_常用Linux中ps命令学习及ps aux与ps -ef的区别
  6. spark 安装配置
  7. 串的块链存储c语言栈,小蚂蚁学习数据结构(18)——串的块链的代码实现
  8. Nginx学习总结(4)——负载均衡session会话保持方法
  9. 一文解锁加密算法的秘密
  10. 6.5移相器(Phasers)
  11. 百度网盘破解限速(免费)
  12. 红帽linux免费下载链接,redhat linux 下载大全 完全整理
  13. 加密文件夹里的图片打不开
  14. 量化派周灏:从物理博士到科技公司 CEO,不变的是“格物致理”...
  15. 京东安卓客户端values文件夹
  16. python根据参数判断性别准吗_根据数据能判断男宝或女宝概率么?
  17. clang 中英文帮助手册
  18. java excel 导出 下载_使用Java导出Excel表格并由浏览器直接下载
  19. 讲讲一条MySQL更新语句是怎么执行的?
  20. 控制与计算机工程国际学术会议,第四届机械、控制与计算机工程国际学术会议ICMCCE2019...

热门文章

  1. SpringBoot 2.x 统一异常处理
  2. 在ubuntu中添加EPSON L485打印机
  3. 2022年起重机司机(限桥式起重机)考试练习题及答案
  4. C语言——读取串口数据,并处理
  5. 分享:基于软件定义的控制解决方案全文
  6. Pytorch教程入门系列4----Autograd自动求导机制
  7. OPJ1002 方便记忆的电话号码
  8. KingSCADA系统实施标准手册(热网项目适用)
  9. 《前端5分钟》之使用CSS3实现酷炫的3D旋转透视
  10. Topaz Video AI for mac(视频增强和修复工具)