基本语法类型Thrift类型系统包括预定义基本类型,用户自定义结构体,容器类型,异常和服务定义
基本类型- bool:布尔类型(true or value),占一个字节
- byte:有符号字节
- i16:16位有符号整型
- i32:32位有符号整型
- i64:64位有符号整型
- double:64位浮点数
- string:未知编码或者二进制的字符串
注意,thrift不支持无符号整型,因为很多目标语言不存在无符号整型(如java)。
容器类型Thrift容器与类型密切相关,它与当前流行编程语言提供的容器类型相对应,采用java泛型风格表示的。Thrift提供了3种容器类型:
- List:一系列t1类型的元素组成的有序表,元素可以重复
- Set:一系列t1类型的元素组成的无序表,元素唯一
- Map<t1,t2>:key/value对(key的类型是t1且key唯一,value类型是t2)。
容器中的元素类型可以是除了service意外的任何合法thrift类型(包括结构体和异常)。
结构体和异常Thrift结构体在概念上同C语言结构体类型—-一种将相关属性聚集(封装)在一起的方式。在面向对象语言中,thrift结构体被转换成类。
异常在语法和功能上类似于结构体,只不过异常使用关键字exception而不是struct关键字声明。但它在语义上不同于结构体—当定义一个RPC服务时,开发者可能需要声明一个远程方法抛出一个异常。
服务服务的定义方法在语法上等同于面向对象语言中定义接口。Thrift编译器会产生实现这些接口的client和server桩。
类型定义Thrift支持C/C++风格的typedef:
typedef i32 MyInteger \\atypedef Tweet ReTweet \\b说明:
枚举类型可以像C/C++那样定义枚举类型,如:
enum TweetType { TWEET, //a RETWEET = 2, //b DM = 0xa, //c REPLY} //dstruct Tweet { required i32 userId; required string userName; required string text; optional Location loc; optional TweetType tweetType = TweetType.TWEET // e optional string language = "english"}说明:
- 编译器默认从0开始赋值
- 可以赋予某个常量某个整数
- 允许常量是十六进制整数
- 末尾没有逗号
- 给常量赋缺省值时,使用常量的全称
注意,不同于protocol buffer,thrift不支持枚举类嵌套,枚举常量必须是32位的正整数
注释Thrfit支持shell注释风格,C/C++语言中单行或者多行注释风格
# This is a valid comment./** This is a multi-line comment.* Just like in C.*/// C++/Java style single-line comments work just as well. |