未知字段和任意类型篇幅较少,因此将他们合并到本文进行描述. Unknown Fields - 未知字段 未知字段是格式良好的协议缓冲区序列化数据,表示解析器无法识别的字段.例如,当一个旧二进制代码解析一个带有新字段的新二进制代码发送的数据时,这些新字段在旧二进制代码中成为未知字段. 最初,proto3消息在解析过程中总是丢弃未知字段,但在3.5版中,我们重新引入了未知字段的保留,以匹配proto2的行为.在版本3.5和更高版本中,解析期间保留未知字段,并将其包含在序列化输出中. Any - 任意…
原文:Swift语言指南(八)--语言基础之元组 元组 元组(Tuples)将多个值组合为一个复合值.元组内的值可以是任何类型,各个元素不需要为相同类型(各个元素之间类型独立,互不干扰--Joe.Huang). 下例中,(404, "Not Found") 是一个描述HTTP状态码的元组.HTTP状态码是当你向WEB服务器请求页面时服务器返回的一个特殊值,如果你(向WEB服务器)请求了一个不存在的网页,返回的状态码就是 404 Not Found : let http404Error…
Updating A Message Type - 更新消息类型 如果现有的消息类型不再满足您的所有需要(例如,您希望消息格式有一个额外的字段),但是您仍然希望使用用旧格式创建的代码,不要担心!在不破坏任何现有代码的情况下更新消息类型非常简单.记住以下规则: 不要更改任何现有字段的字段编号. 如果添加新字段,则使用"旧"消息格式的代码序列化的任何消息仍然可以由新生成的代码进行解析.您应该记住这些元素的默认值,以便新代码可以正确地与旧代码生成的消息交互.类似地,由新代码创建的消息也可以由…
定义消息类型 首先让我们看一个非常简单的例子.假设您想定义一个搜索请求消息格式,其中每个搜索请求都有一个查询字符串.您感兴趣的特定结果页以及每页的结果数.下面是用于定义.proto消息类型的文件. syntax = "proto3"; message SearchRequest { string query = 1; int32 page_number = 2; int32 result_per_page = 3; } 文件第一行指定您使用的语法:如果不这样做,协议缓冲区编译器将假定您…
标量值类型 标量消息字段可以具有以下类型之一 -- 下表显示了.proto文件中指定的类型,以及自动生成的类中相应的类型: .proto Type 说明 C++ Type Java Type Python Type[2] Go Type Ruby Type C# Type PHP Type Dart Type double double double float float64 Float double float double float float float float float32 F…
Swift提供了各种控制流程语句.这些包括while多次执行任务的循环; if,guard和switch基于特定条件执行不同代码分支的语句; 和语句,如break和continue对执行流在你的代码转移到另一个点. 迅速还提供了for- in循环,可以很容易地遍历数组,字典,范围,字符串和其它序列. Swift的switch声明比许多类C语言中的声明强大得多.案例可以匹配许多不同的模式,包括区间匹配,元组和特定类型的强制类型转换.switch案例中的匹配值可以绑定到临时常量或变量以在案例主体中使…
函数是执行特定任务的自包含代码块.您为函数指定了一个标识其功能的名称,此名称用于“调用”函数以在需要时执行其任务. Swift的统一函数语法足够灵活,可以表达从没有参数名称的简单C风格函数到具有每个参数的名称和参数标签的复杂Objective-C风格方法.参数可以提供默认值以简化函数调用,并且可以作为输入输出参数传递,这些参数在函数完成执行后修改传递的变量. Swift中的每个函数都有一个类型,由函数的参数类型和返回类型组成.您可以像Swift中的任何其他类型一样使用此类型,这使得将函数作为参数…
前言 近日在学习gRPC框架的相关知识时接触到Protobuf(protocol-buffers,协议缓冲区),proto3等知识.网上很多文章/帖子经常把gRPC与proto3放在一起,为避免初学者产生混淆,这里先简单介绍一下gRPC.Protobuf.proto3三者以及他们之间的关系: gRPC:一个高性能.开源的通用RPC框架,它可以使用Protobuf定义服务 Protobuf:协议缓冲区是一种与语言无关.与平台无关的可扩展机制,用于序列化结构化的数据(参考JSON) proto3:p…
Generating Your Classes - 生成类 要生成Java.Python.C++.Go.Ruby.ObjuleC或C代码,需要使用.proto文件中定义的消息类型,还需要在.proto上运行协议缓冲区编译器protoc.如果尚未安装编译器,请下载该软件包并按照自述文件中的说明进行操作.对于Go,您还需要为编译器安装一个特殊的代码生成器插件:您可以在GitHub上的golang/protobuf存储库中找到这个插件和安装说明. 协议编译器的调用方式如下: protoc --prot…
Options - 选项 .proto文件中的单个声明可以使用许多 选项 进行注释.选项不会更改声明的总体含义,但可能会影响在特定上下文中处理声明的方式.可用选项的完整列表在google/protobuf/descriptor.proto中定义. 有些选项是文件级选项,这意味着它们应该写在顶级作用域中,而不是写在任何消息.枚举或服务定义中.有些选项是消息级别的选项,这意味着它们应该写在消息定义中.有些选项是字段级选项,这意味着它们应该写在字段定义中.也可以在枚举类型.枚举值.字段之一.服务类型和…