首页 > 其他分享 >thrift idl 定义语法小认识

thrift idl 定义语法小认识

时间:2023-09-29 21:55:51浏览次数:37  
标签:定义 required 数据类型 语法 idl 类型 thrift optional Thrift

内容来自对 chatgpt 的提问

案例

Apache Thrift是一种著名的跨语言服务开发框架。在Thrift中,IDL(接口定义语言)用于定义服务接口和数据类型。以下是如何在 Thrift 的 IDL 中定义一个结构体(Struct):

下面这个案例表示一个拥有名字,年龄,婚姻状况,爱好以及其它属性的人的数据模型。

struct Person {
    1: string name,
    2: i32 age,
    3: bool is_married,
    4: list<string> hobbies,
    5: map<string, string> attributes
}

案例解释

在这个Person结构体的定义中:

  1. 1, 2, 3, 4, 5 是每个字段的编号,这是字段在编译时的标识符,一旦设置了就不应该修改,否则会导致兼容性问题。只要已有的字段的序号不变,后续如果新增非 required 类型的字段,也不需要升级当前调用该接口的服务。

  2. string,i32,bool,list,map 是数据类型。Thrift支持多种数据类型,包括基本类型(如string,i32,double,bool等),容器类型(如list,set,map)和用户自定义类型。

  3. name,age,is_married,hobbies,attributes 是字段的名称,这些是在你的代码中使用的字段标识符。字段名一般采用蛇形命名法(多个单词使用下划线分割)

特别注意:

  1. 所有的字段编号必须是唯一的。同一个结构体里序号不能重复。

  2. 字段的类型可以是内建的数据类型,也可以是用户自定义的其它结构体或服务。

  3. 字段可以添加 optionalrequired 修饰符来标识这个字段是否必须。如果没有指定,则默认为 optional

    • 要注意的是,使用 required 需要谨慎,因为一旦将字段声明为必需,在之后的版本中在结构中删除或更改这些字段,可能会导致向后兼容性的问题。这就是为什么在大多数情况下,推荐使用optional来声明字段。
    • 在一般的idl 结构体转成其他编程语言的结构体时,一般会把没有标 optionalrequired 的字段转成指针类型,指针类型如果为空值,一般在序列化后不会存储下来,这样在网络传输时能节省一些开销。

标签:定义,required,数据类型,语法,idl,类型,thrift,optional,Thrift
From: https://www.cnblogs.com/hi3254014978/p/17737420.html

相关文章

  • python简写语法总结
    Lambdadefadd(a,b):returna+bprint(add(1,2))简写成add=lambdaa,b:a+bprint(add(1,2))[]推导式正常写法:s_list=[]foriinrange(5):s_list.append(i)print(s_list)简写:s_list=[iforiinrange(5)]print(s_list)判断正常写法:a=......
  • Lesson2 GridLayOut 表格布局
     packagecom.kuang.lesson1;importjava.awt.*;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;publicclassTestGridLayout{publicstaticvoidmain(String[]args){Frameframe=newFrame("TestGridLayout")......
  • Dockerfile 语法详解:构建定制化容器镜像的基石
    Docker已经成为现代应用程序开发和部署的关键工具之一。在Docker的世界中,Dockerfile是一个至关重要的文件,它定义了如何构建容器镜像的步骤和配置。本文将深入探讨Dockerfile的语法,为您提供构建定制化容器镜像的基础知识。Dockerfile的基本结构Dockerfile是一个纯文本文件,其......
  • c的基本语法(课上笔记)
    "#"的意义预处理,在编译时进行内容代替scanf对于scanf("");引号中内容为必须输入的内容。当输入多个数据时,默认输入的数据间以空格或者回车分开。对于int,直接相除为向下取整14.0f格式即表示(float)14.0定义常量的方法#defineCSPo表示将CSP定义为o(CSP为宏,o为内容)const......
  • Nginx神奇的if语法
    我在Nginx里声明了一个变量,中间很多逻辑处理,最后想根据这个变量做http还是https跳转。话不多说,直接上nginx.confset$usessl"0";...if($usessl="1") { proxy_passhttps://$proxyserver; } if($usessl="0") { proxy_passhttp://$proxyserver; }启动......
  • Python语法(4)
    Python语法(4)这次我们讲的是字符串,这是我认为特别重要的地方!!!1.字符与整数之间的联系每个常用字符其实都有一个对应的整数表示,二者之间可以相互转化,整数范围大概是-128-127,二者之间是可以相互转化的,但是要注意的是目前没有出现负数与之对应的字符将字符转化成对应的ASCII码用o......
  • Django 使用模板语法编写新闻中心(爬虫获取数据)
    1.创建项目#创建项目django-adminstartprojectnews#进入项目目录cdnews#创建apppythonmanage.pystartappapp012.修改app2.1添加html进入app01文件夹在app01文件夹中添加templates文件夹在templates文件夹中添加index.html<!DOCTYPEhtml><......
  • 模板语法
    在Django中,python是可以给html传值的1.python给模板传值defindex(request):returnrender(request,"index.html",{"名称1":"值1","名称2":"值2"})1.1render方法参数:defrender(request,template_name,context=None,conte......
  • 【C语言初阶篇】for语句的基本语法和使用规则!
    <br><br/><center><fontcolor="#006666">......
  • Python 语法笔记
    快速入门Python(随便乱记的笔记)https://docs.python.org/zh-cn/3/tutorial/index.htmlhttps://www.runoob.com/python/python-tutorial.html输入input()函数input直接读取一整行(不允许存在空格),返回值为string类型一行中仅有一个数时,返回所输入的数字的数据类型没有空格时......