thrift IDL 基本类型和实践(一)struct 结构体、文件引用 和 基本类型

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

简介

Thrift 通过 IDL(Interface Definition Language)定义通用的服务接口,通过 Thrift 提供的编译器,将 IDL 编译为不同语言的代码,通过这个方式实现跨语言的功能。

我写的这篇文章,参考了两篇比较好的文章,从实践的角度看下 Thrift IDL 的编写

文章系列

struct 结构体

struct 是 Thrift 的基本组成类型,他的特点是:

  1. 成员都通过整数编号,且编号不能重复;
  2. 成员可以通过 required、optional 描述符描述,如果 required 的成员没有赋值,会得到提示,如果 optional 的成员没有赋值,则不会被序列化。描述符也可以为空,默认情况既不是optional,也不是required,而是"opt-in, req-out",参考官网解释
  3. 成员都需要有明确类型
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;
}
复制代码

猜你喜欢

转载自juejin.im/post/7018049212151496711