一、支持的类型

1、IDL支持常见的基本类型,常量,枚举,容器,结构体,服务。不支持多态和重载,参数、返回值不能为空,各个基本类型的标识如下:

bool:对应java的boolean,布尔类型(true or value),占一个字节

byte:对应java的byte有符号字节

i16:16位有符号整型,对应java的short

i32:32位有符号整型,对应java的int

i64:64位有符号整型,对应java的long

double:64位浮点数,对应java的long

string:未知编码或者二进制的字符串,对应java的String

binary:二进制数据,对应java的ByteBuffer

2、IDL 可支持list,map,set等容器,其中list对应java中的ArrayList,map对应java中的HashMap,set对应于java的HashSet。

struct Test {
1: map<string, User> usermap,
2: set<i32> intset,
3: list<double> doublelist
}

3、IDL通过struct关键字定义结构体,结构体在java中对应的是实体类。它与java中的class差不多,但有一些不同,下面是他的约束:

  • struct不能继承,但是可以嵌套,不能嵌套自己。

  • 其成员都是有明确类型

  • 成员是被正整数编号过的,其中的编号是不能重复的,这个是为了在传输过程中编码使用。

  • 成员分割符可以是逗号(,)或是分号(;),而且可以混用

  • 字段会有optional和required之分和protobuf一样,但是如果不指定则为无类型–可以不填充该值,但是在序列化传输的时候也会序列化进去,optional是不填充则不序列化,required是必须填充也必须序列化。

  • 6.每个字段可以设置默认值

  • 7.同一文件可以定义多个struct,也可以定义在不同的文件,进行include引入。

struct User{
1: required string name, //改字段必须填写
2: optional i32 age = 0; //默认值
3: bool gender //默认字段类型为optional
}

4、支持enum(枚举)类型,但也有一些约束;

  • 编译器默认从0开始赋值

  • 可以赋予某个常量某个整数

  • 允许常量是十六进制整数

  • 末尾没有分号

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

注意:枚举枚举类嵌套,枚举常量必须是32位的正整数

enum HttpStatus {
OK = 200,
NOTFOUND=404
}

5、常量,只需要在变量前面加上const即可。

二、类型定义

Thrift支持C/C++类型定义,例如:

typedef i32 myint

typedef i64 usernumber

三、Exception (异常)

异常在语法和功能上类似于结构体,差别是异常使用关键字exception,而且异常是继承每种语言的基础异常类。

四、Service (服务定义类型)

这个是最重要的,在mtThrift中的所有对外提供的服务接口都通过这个定义。定义方式类似于java中的接口定义

service HelloService {
i32 sayInt(1:i32 param)
string sayString(1:string param)
bool sayBoolean(1:bool param)
void sayVoid()
}

五、Namespace (名字空间)

namespace java com.example.test == package com.example.test

  

IDL语言开发规范的更多相关文章

  1. C#语言开发规范-ching版

    拙劣之处请大家斧正,愚某虚心接受,如有雷同,不胜荣幸 C#语言开发规范 作者ching 1.  命名规范 a) 类 [规则1-1]使用Pascal规则命名类名,即首字母要大写. eg: Class T ...

  2. (转载)C#语言开发规范

    1.  命名规范a) 类[规则1-1]使用Pascal规则命名类名,即首字母要大写.eg:Class Test{...}[规则1-2]使用能够反映类功能的名词或名词短语命名类.[规则1-3]不要使用“ ...

  3. C#语言开发规范

    1.  命名规范 a) 类 [规则1-1]使用Pascal规则命名类名,即首字母要大写. eg: Class Test { ... } [规则1-2]使用能够反映类功能的名词或名词短语命名类. [规则 ...

  4. 我的公司培训讲义(1):.NET开发规范教程

    这是1年多以前我在公司所做讲座的讲义,现在与园友们分享,欢迎拿去使用.一起讨论.文中有若干思考题,对园友们是小菜一碟.另有设计模式讲义一篇,随后发布.博文上了首页,感谢博客园团队推荐,也感谢所有园友的 ...

  5. Go语言开发

    Go语言圣经(中文版)     Go编程语言规范 搭建Go开发及调试环境(LiteIDE + GoClipse) -- Windows篇           Go开发工具 Go命令行操作命令详细介绍 ...

  6. 【敏捷开发】Android团队开发规范

    这里说的开发规范分成目录规范,项目和包名的命名规范,类,方法,变量和常量的命名规范这几种. 目录规范 目录规范——在开发中整体文件夹组织结构. Requirement——需求文档文件夹 Design— ...

  7. Web前端开发规范文档(google规范)

    (Xee:其实没什么规范约束,但是养成一种好习惯,何乐而不为?) 区分大小写 xhtml  区分大小写,xhtml要求 标签名 属性名 值都要小写,并且要有双引号和 标签闭合. css 元素名称以及i ...

  8. 从" ThinkPHP 开发规范 "看 PHP 的命名规范和开发建议

    稍稍水一篇博客,摘抄自Think PHP 的开发规范,很有引导性,我们可以将这些规范实践到原生 PHP 中. 命名规范 使用ThinkPHP开发的过程中应该尽量遵循下列命名规范: 类文件都是以.cla ...

  9. thinkphp开发规范

    1.编写目的     为了更好的提高技术部的工作效率,保证开发的有效性和合理性,并可最大程度的提高程序代码的可读性和可重复利用性,指定此规范.开发团队根据自己的实际情况,可以对本规范进行补充或裁减. ...

随机推荐

  1. Unity3d 面向对象设计思想(六)(Unity3d网络异步数据)

    在MonoBehavior类中有一个方法是StartCoroutine.里面要求的是一个接口为IEnumerator协同的返回值, 在Unity3d中,协同的作用是马上返回结果的.而不影响其它程序的运 ...

  2. 剑指offer(第2版)刷题 Python版汇总

    剑指offer面试题内容 第2章 面试需要的基础知识 面试题1:赋值运算符函数 面试题2:实现Singleton模式  解答 面试题3:数组中重复的数字 解答 面试题4:二维数组中的查找 解答 面试题 ...

  3. beego——URL构建

    如果可以匹配URl,那么beego也可以生成URL吗?当然可以. UrlFor()函数就是用于构建执行函数的URL的.它把对应控制器和函数名结合的字符串作为第一个参数,其余参数对应URL中的变量.未知 ...

  4. Entity FrameWork Code First无法生成数据库 解决办法

    我是控制台应用程序,没有connectionStrings,试了几个方法也都不可以. 这是别人的博客用其他方法. http://www.cnblogs.com/Gyoung/archive/2013/ ...

  5. 【HTML5校企公益课】第四天

    1.上午考试没去.. 2.下午跟不上.. 变色.html <!DOCTYPE html> <html> <head> <meta charset=" ...

  6. 部署私有云网盘owncloud

    环境说明: [root@localhost ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@localhost ~]# una ...

  7. 线段树的lazy(poj3468)

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 73163   ...

  8. Limit CPUID MAX

    Limit CPUID MAX to 3.是指出现在英特尔平台的BIOS设置选项.很多主板也显示成CPUID maximum value limit选项.中文意义是:限制执行CPUID指令返回数值大于 ...

  9. LINUX系统运行查看

    1.查看内存使用情况 free -m 2.查看内存,cpu等使用情况排序,使用ps -aux命令 ps -aux --sort=+rss :按内存升序排列 ps -aux --sort=-rss :按 ...

  10. 并发-CountDownLatch、CyclicBarrier和Semaphore

    CountDownLatch.CyclicBarrier和Semaphore 参考: http://www.cnblogs.com/dolphin0520/p/3920397.html https:/ ...