当前位置: 首页 > news >正文

Golang ProtoBuf 初学者完整教程:语法

一、编码规范推荐

1、文件名使用小写下划线的命名风格,例如 lower_snake_case.proto
2、使用 2 个空格缩进
3、包名应该和目录结构对应
4、消息名使用首字母大写驼峰风格(CamelCase),例如message StudentRequest { ... }
5、字段名使用小写下划线的风格,例如 string status_code = 1
6、枚举类型,枚举名使用首字母大写驼峰风格,例如 enum FooBar
7、RPC 服务名和方法名,均使用首字母大写驼峰风格,例如service FooService{ rpc GetSomething() }

二、protoC 执行命令

protoc --go_out=. *.proto 

三、标量类型表

四、使用语法案例

// 使用proto3版本
syntax = "proto3";// 可选,防止不同的消息类型有命名冲突
package main;                     // 指定go的包名,会在当前目录生成一个main目录,然后里面存放*.pb.go文件
option go_package = "main";         // 导入其他的proto文件
import "mypro/other.proto";   // message是关键词,Student是类型名,后续生成一个Student的结构体  
message Student {         // 格式:类型 字段名 = 数字标识符,每个标识符是唯一的                                      string name = 1;                  // repeated代表字段可重复,对应Student结构体里的字段:Scores []int32repeated int32 scores = 3;                // 定义一个map,键是string,值是int32map<string, int32> points = 1;    // 指定了一些字段编号不应该被再次使用。这意味着在 Foo 消息的定义中,你不能再使用字段编号 2、15 以及 9 到 11(包括 9 和 11)来添加新的字段reserved 2, 15, 9 to 11;  // 指定了一些字段名称不应该被再次使用。这意味着在 Foo 消息的定义中,你不能再使用字段名称 foo 或 bar 来添加新的字段。reserved "foo", "bar";                      // 枚举类型enum Gender {           // 开启别名alias 选项:允许为不同的枚举值赋予相同的标识符                       option allow_alias = true;              // 枚举类型的第一个选项标识符必须是0,也是枚举类型默认值FEMALE = 0;                                     MALE = 1;// 开启别名选项后OTHER = 1;                                      }Gender gender = 2;// 嵌套另一个message作为消息类型,这里会生成 Results []*Student_Result 类似这样的切片repeated Result results = 1;               // 也支持直接嵌套写messagemessage Result {                                 string url = 1;string title = 2;repeated string snippets = 3;}message ErrorStatus {string message = 1;// 标识details字段可以属于任何类型(可以是string int等),生成类似 []*anypb.Any 这样的切片,记得要在前面import "google/protobuf/any.proto"repeated google.protobuf.Any details = 2;      }//todo 确保在消息的实例中,只有 oneof 定义的字段中的一个字段被赋值。这是一种类型安全的方式来表示一个字段是多个可能类型的其中之一,而不是多个字段可以同时被赋值。//在你提供的 protobuf 程序中,SampleMessage 消息定义了一个名为 test_oneof 的 oneof。这意味着在任何给定的 SampleMessage 实例中,只有 name 字段或 sub_message 字段可以被设置,而不能同时设置两者。oneof test_oneof {string name = 4;SubMessage sub_message = 9;}//如果消息类型是用来远程通信的(Remote Procedure Call, RPC),可以在 .proto 文件中定义 RPC 服务接口。//例如我们定义了一个名为 SearchService 的 RPC 服务,提供了 Search 接口,入参是 SearchRequest 类型,返回类型是 SearchResponseservice SearchService {rpc Search (SearchRequest) returns (SearchResponse);}
}message Result {string url = 1;string title = 2;repeated string snippets = 3;
}

http://www.lryc.cn/news/338449.html

相关文章:

  • 使用.cc域名的优势
  • 存储器管理单元MMU概述
  • 了解监控易(25):网络拓扑管理,可视化监控网络,快速定位问题
  • C#学习笔记10:winform上位机与西门子PLC网口通信_中篇_winform的窗口操作设计、日志的添加使用
  • 第14章 大数据与数据科学知识点梳理
  • FHE全同态加密简介
  • 【vue】跨组件通信--依赖注入
  • Aritest+python+Jenkins解放双手iOS/Android自动化
  • Problem #7 [Medium]
  • MySQ数据库: MySQL数据库的安装配置 ,图文步骤详细,一篇即可完成安装完成! MySQL数据库如何与客户端连接
  • vue3+vant自动导入+pina+vite+js+pnpm搭建项目框架
  • 使用 Axios 处理 AxiosError 的三种常见方法
  • linux上安装Tomcat
  • Ubuntu20.04安装ROS过程记录以及常见报错处理
  • PaddleOCR 图片日期识别
  • HTML5学习记录
  • 提升法律文书起草效率:AlphaGPT 助力律师快速生成诉讼和仲裁文件
  • 大数据之 Hive 快速搭建的详细步骤
  • 从入门到高级的99个python知识点
  • 设计模式之备忘录模式(上)
  • 算法中二分搜索详解
  • 关于无线充电项目总结IP6826
  • [CSS]样式属性+元素设置
  • 优雅关闭jar程序shell 脚本
  • 基于51单片机多功能洗衣机控制(强洗弱洗漂洗)设计( proteus仿真+程序+设计报告+原理图+讲解视频)
  • CVP(ChatGPT、Vector Database和Prompt)
  • c语言-----数组知识汇总
  • 【游戏开发之热更新技术】
  • 小红的白色字符串
  • Python+Django+Html网页版人脸识别考勤打卡系统