thrift IDL 基本类型和实践(一)struct 结构体、文件引用 和 基本类型
简介
Thrift 通过 IDL(Interface Definition Language)定义通用的服务接口,通过 Thrift 提供的编译器,将 IDL 编译为不同语言的代码,通过这个方式实现跨语言的功能。
我写的这篇文章,参考了两篇比较好的文章,从实践的角度看下 Thrift IDL 的编写
thrift.apache.org/docs/types
1csh1.github.io/2017/02/21/…
文章系列
thrift IDL 基本类型和实践(一) struct 结构体、文件引用 和 基本类型
thrift IDL 基本类型和实践(二)- Container (容器)
struct 结构体
struct 是 Thrift 的基本组成类型,他的特点是:
成员都通过整数编号,且编号不能重复;
成员可以通过 required、optional 描述符描述,如果 required 的成员没有赋值,会得到提示,如果 optional 的成员没有赋值,则不会被序列化。描述符也可以为空,默认情况既不是optional,也不是required,而是"opt-in, req-out",参考官网解释
成员都需要有明确类型
struct PackageInfo { 1: optional i32 id; 2: optional string url; 3: optional string name; } 复制代码
文件引用
开发过程中,我们一般不会把 struct 都放到一个文件中,会拆分为多个文件定义,通过 include 关键字互相引用
// base.thrift struct BaseInfo { 1: optional i32 id; 2: optional string url; 3: optional string name; } 复制代码
// package.thrift include "./base.thrift" // 需要是双引号 struct PackageInfo { 1 : optional string base.name; // 通过文件名找到 base,注意不是命名空间 2 : optional string description; } 复制代码
基本类型
bool: 布尔值,对应Java中的boolean,
byte: 有符号字节,对应Java中的byte,对应MySQL的tinyint
i16: 16位有符号整型,对应Java中的short,对应MySQL的smallint
i32: 32位有符号整型,对应Java中的int,对应MySQL的int
i64: 64位有符号整型,对应Java中的long,对应MySQL的bigint
double: 64位浮点型,对应Java中的double
string: 字符串,对应Java中的String
binary: Blob 类型,对应Java中的byte[]
这里都是有符号的,出于不同语言的兼容性考虑,IDL 不支持无符号的类型
MySQL 参考:dev.mysql.com/doc/refman/…
struct ExampleInfo { 1: optional i32 id; 2: optional string url; 3: optional string name; }
作者:恒十七
链接:https://juejin.cn/post/7018049212151496711