阅读 97

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 的基本组成类型,他的特点是:

  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; }


作者:恒十七
链接:https://juejin.cn/post/7018049212151496711


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐