日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

thrift数据类型

發布時間:2025/7/14 63 豆豆
生活随笔 收集整理的這篇文章主要介紹了 thrift数据类型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

1、Types

Thrift類型系統包括預定義基本類型,用戶自定義結構體,容器類型,異常和服務定義

(1) 基本類型

bool: 布爾類型,占一個字節

byte: 有符號字節

i16:16位有符號整型

i32:32位有符號整型

i64:64位有符號整型

double:64位浮點數

string:未知編碼或者二進制的字符串

注意:thrift不支持無符號整形,因為很多目標語言不存在無符號整形(比如java)

(2)容器類型

List<t1>:一系列t1類型的元素組成的有序列表,元素可以重復

Set<t1>:一些t1類型的元素組成的無序集合,元素唯一不重復

Map<t1,t2>:key/value對,key唯一

容器中的元素類型可以是除service以外的任何合法的thrift類型,包括結構體和異常類型

(3)結構體和異常

Thrift結構體在概念上同c語言的結構體類似,在面向對象語言中,thrift結構體將被轉化為類。

異常在語法和功能上類似于結構體,只是異常使用關鍵字exception而不是struct關鍵字來聲明。但它在語義上不同于結構體—當定義一個RPC服務時,開發者可能需要聲明一個遠程方法拋出一個異常。

(4)服務

Thrift中服務定義的方式和語法等同于面向對象語言中定義接口。Thrift編譯器會產生實現接口的client和server樁。

(5)類型定義

Thrift支持C/C++風格的typedef:

typedef i32 MyInteger \\a typedef Tweet ReTweet \\b

說明:?

a.? 末尾沒有逗號?

b.?? struct可以使用typedef

2、枚舉類型

可以像C/C++那樣定義枚舉類型,如:

enum TweetType {TWEET, //aRETWEET = 2, //bDM = 0xa, //cREPLY //d} struct Tweet {1: required i32 userId;2: required string userName;3: required string text;4: optional Location loc;5: optional TweetType tweetType = TweetType.TWEET // e16: optional string language = "english"}

說明:

a:編譯器默認從0開始賦值

b:可以賦予某個常量

c:允許常量是十六進制整數

d:末尾沒有逗號

e:給常量賦缺省值時,使用常量的全稱

不同于protocol buffer,thrift不支持枚舉類嵌套,枚舉常量必須是32位正整數

3、注釋

Thrift支持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.

4、命名空間

Thrift中的命名空間同C++中的namespace和java中的package類似,它們均提供了一種組織(隔離)代碼的方式。因為每種語言均有自己的命名空間定義方式(如python中有module),thrift允許開發者針對特定語言定義namespace:

namespace cpp com.example.project // a namespace java com.example.project // b

5、文件包含

Thrift允許文件包含,需要使用thrift文件名作為前綴訪問被包含的對象,如:

include "tweet.thrift" // a...struct TweetSearchResult {1: list<tweet.Tweet> tweets; // b}

說明:

a:thrift文件名需要雙引號包含,末尾沒有逗號或者分號

b:注意tweet前綴

6、常量

Thrift允許用戶定義常量,復雜的類型和結構體可以使用JSON形式表示:

const i32 INT_CONST = 1234; // aconst map<string,string> MAP_CONST = {"hello": "world", "goodnight": "moon"}

說明:

a:分號是可選的,支持十六進制賦值

7、定義結構體

struct Tweet {1: required i32 userId; // a2: required string userName; // b3: required string text;4: optional Location loc; // c16: optional string language = "english" // d}struct Location { // e1: required double latitude;2: required double longitude;}

說明:

a:每一個域都有一個唯一的正整數標識符

b:每個域可以標識為required或者optional(也可以不注明)

c:結構體可以包含其他結構體

d:域可以有缺省值

e:一個thrift中可以定義多個結構體,并存在引用關系

規范的struct定義中的每個域均會使用required或者optional關鍵字進行標識。如果required標識的域沒有賦值,thrift將給予提示。如果optional標識的域沒有賦值,該域將不會被序列化傳輸。如果某個optional標識域有缺省值而用戶沒有重新賦值,則該域的值一直為缺省值。
與service不同,結構體不支持繼承,即,一個結構體不能繼承另一個結構體。

8、定義服務

在流行的序列化/反序列化框架(如protocol buffer)中,thrift是少有的提供多語言間RPC服務的框架。
Thrift編譯器會根據選擇的目標語言為server產生服務接口代碼,為client產生樁代碼。

//“Twitter”與“{”之間需要有空格!!! service Twitter {// 方法定義方式類似于C語言中的方式,它有一個返回值,一系列參數和可選的異常// 列表. 注意,參數列表和異常列表定義方式與結構體中域定義方式一致.void ping(), // abool postTweet(1:Tweet tweet); // bTweetSearchResult searchTweets(1:string query); // c// ”oneway”標識符表示client發出請求后不必等待回復(非阻塞)直接進行下面的操作,// ”oneway”方法的返回值必須是voidoneway void zip() // d}

說明:

a:函數定義可以使用逗號或分號標識結束

b:參數可以是基本類型或者結構體,參數只能是只讀的(const),不可以作為返回值

c:返回值可以是基本類型或者結構體

d:返回值可以是void

注意,函數中參數列表的定義方式與struct完全一樣?

Service支持繼承,一個service可使用extends關鍵字繼承另一個service。

轉載于:https://my.oschina.net/u/2000675/blog/1542773

總結

以上是生活随笔為你收集整理的thrift数据类型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。