1.类型

thrift的类型系统包括预定于的基本类型,用户自定义结构体,容器类型,异常和服务定义。

thrift不支持无符号类型,因为很多编程语言不存在无符号类型。

(1.1)基本类型

bool:布尔类型(true or false),占用一个字节

byte:字节

i16:16位整型

i32:32位整型

i64:64位整型

double:64位浮点数

binary:未经过编码的字节流

string:未知编码或者二进制字符串

 

(1.2)容器类型

Thrift容器与类型密切相关,它与当前流行编程语言提供的容器类型相对应,采用java泛型风格表示的。Thrift提供了3种容器类型

list<t1>:一系列的t1类型组成的有序表,元素可以重复。

set<t1>:一系列的t1类型组成的无序集合,元素不可以重复。

map<t1,t2>:以t1为key,t2为value的键值对,t1不可以重复。

容器的类型可以是除了service之外的任何Thrift类型包括结构体和异常。

 

(1.3)结构体和异常

Thrift的结构体与C语言的结构体相似,一种将各种相关属性封装在一起的方式,在面向对象的语言中,它们常被转换成类。

异常与结构体类似,但是它的声明使用exception而不是struct,在语义上不同于struct,当定义远程调用服务时,开发者可能需要声明一个远程方法抛出一个异常。

struct People {
    1: string name;
    2: i32 age;
}

exception RequestException {
    1: i32 code;
    2: string error_info;
}

 

(1.4)服务

服务的定义类似于面向对象编程中的接口定义。

Service支持继承,一个service可使用extends关键字继承另一个service。

service HelloWord {
    string  Action(1: string name, 2: i32 age);
}

 

(1.5)类型定义

thrift支持C/C++中的typedef

typedef i32 MyInteger   

typedef Tweet ReTweet

 

(1.6)枚举类型

thrift可以使用枚举

 

enum TweetType {
    TWEET,       
    RETWEET = 2,  
    DM = 0xa,    
    REPLY
}

 

struct Tweet {
    1: required i32 userId;
    2: required string userName;
    3: required string text;
    4: optional Location loc;
    5: optional TweetType tweetType = TweetType.TWEET 
    6: optional string language = "english"
}
说明:

a.  编译器默认从0开始赋值

b.  可以赋予某个常量某个整数

c.  允许常量是十六进制整数

d.  末尾没有逗号

e.  给常量赋缺省值时,使用常量的全称

 

(1.7)常量

thrift支持常量,使用关键字const

const i32 INT_MAX= 10

const map<string,string> MAP_CONST = {"hello": "world", "goodnight": "moon"}

 

2.注释

thrift支持shell风格的注释,也支持C/C++风格。

 

3.命名空间

thrift的命名空间与C++的命名空间和java的pakeage类似

格式:namespace 语言名 路径

 

4.文件包含

相当于C++的include和java的import,使用关键字include定义

include  "tweet.thrift"

 

5.定义结构体

thrift提供两个关键字required,optional,分别用于表示对应的字段时必填的还是可选的。

结构体中可以包含结构体。

struct Location {                            
    1: required double latitude;
    2: required double longitude;
}struct Tweet {
    1: required i32 userId;                  
    2: required string userName;              
    3: required string text;
    4: optional Location loc;                
    5: optional string language = "english"
}

 参考链接:http://diwakergupta.github.io/thrift-missing-guide/

 

posted on 2017-11-29 14:52  LyndonYoung  阅读(3630)  评论(0编辑  收藏  举报