本文旨在对于个人知识的梳理以及知识的分享,如果有不足的地方,欢迎大家在评论区指出
1. 基本数据类型
- bool 布尔值
- byte 有符号字节
- i16 16位有符号整数
- i32 32位有符号整数
- i64 64位有符号整数
- double 64位浮点数
- string 字符串,对应Java中的String
- binary Blob类型,对应Java中的byte[]
- list 有序表,对应Java中的ArrayList
- set 不允许元素重复,对应Java中的HashSet
- map<obj, obj> 键不允许重复,对应Java中的HashMap,map的key最好是thrift的基本类型,有些语言不支持复杂类型的key,JSON协议只支持那些基本类型的key
2. 常量定义
- 简介
Thrift允许定义跨语言使用的常量 - 实例
const i32 INT_CONST = 1234
2. struct 结构体
- 简介
thrift中struct是定义为一种对象,和面向对象语言中的Class差不多,但是具有一下的一些约束:- struct不能继承,但是可以嵌套,不可以嵌套自己
- 其成员都会有明确的数据类型
- 其中的每一个成员都被正整数编号,编号是不可以重复的,方便之后传输过程中的编码
- 成员之间的分隔符可以是’,‘或者’;’,并且是可以混用的,但是为了清晰起见,建议只使用一种
- 字段会有required和optional两种,optional表示当前字段可以不填充,而required表示当前字段需要被填充
- 每个字段可以设置默认值
- 同一个文件中可以定义多个struct,也可以定义在不同的文件中,通过import来引入
- 实例
struct Item{ 1: required i64 id, 2: required string title, 3: required string content, 10: optional map<string, string> extra }
3. enum 枚举
- 简介
当定义一个类型或者消息状态时,它只能是预定义的值列表中的一个,可以用枚举来实现 - 实例
enum Item{ IS_REGISTER = 1 # 已注册 IS_DISPATCHED = 2 # 已分配 IS_CONTACTED = 3 # 已联络 }
4. exception 异常
- 简介
异常在语法和功能上类似于结构体(struct),差别是异常使用关键字exception,而且异常是继承每种语言的基础异常类 - 实例
exception Item{ 1: i32 errorCode, 2: string message, 3: string userInfo }
5. service 服务
- 简介
服务的定义方法在语意上等同于面向对象语言中的接口 - 实例
service ItemService { GetItemResponse GetItem (1: GetItemRequest req), // 定义了GetItem方法,且只有一个参数 }
6. namespace 名字空间
- 简介
Thrift中的命名空间类似于Java中的package,它提供了一种组织代码的简便方式 - 实例
namespace java com.example.test namespace go com.example.test
7. comment 注释
- 简介
与Java中的注释方式一致 - 实例
// => 单行注释 /**/ => 多行注释
8. include 依赖
- 简介
便于管理、重用和提高模块性/组织性,Thrift允许文件包含其他的Thrift文件,用户需要使用thrift文件名作为前缀访问被包含的对象 - 实例
include "test.thrift"