一、支持的类型

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. python安装virtualenv

    pip install virtualenv 为了使用更方便用,安装另外一个,windows下要-win,linux下不用 pip install virtualenvwrapper-win 使用方法 ...

  2. LINQ不包含列表

    var query=lista.Where(p=>!listb.Any(g=>p.id==g.id && p.no==g.no))

  3. crm--业务点详细概述

    一.CRM简介:(为什么开发CRM) 此项目主要供自己的公司使用,原来因为公司人员较少,人员管理考勤等都用excel保存.但是现在因为公司人员,以及部门增多,为了方便管理 ,供销售人员使用内部系统更方 ...

  4. beego——多种格式的数据输出

    beego当初设计的时候就考虑了API功能的设计,而我们在设计API的时候经常是输出JSON或者XML数据,那么beego提供了这样的方式直接输出: 1.JSON格式输出 func (this *Ad ...

  5. 转:css中!important的作用

    转:http://www.cnblogs.com/guoguo-15/archive/2011/08/24/2151859.html {*rule !important}这个css规则当今在网页制作的 ...

  6. 表单向controller传值如果没填controller取到的是null

    jsp前端表单,向controller传数据,如果没有值,后台传入的是null,比如checkbox未选中,后台设置的Integer[] ids,接收到的ids=null,hidden标签如果没有值, ...

  7. springmvc 原生servlet支持

    /** * 可以使用 Serlvet 原生的 API 作为目标方法的参数 具体支持以下类型 * * HttpServletRequest * HttpServletResponse * HttpSes ...

  8. ThinkPHP框架基础知识三

    一.JS文件与Css文件存放位置 其实JS与Css文件放在任意位置都可以找到,只要路径正确就行. 在TP框架中我们访问的所有文件都要走入口文件index.php,相当于访问的是index.php页面. ...

  9. PAT 天梯赛 L1-019. 谁先倒 【水】

    题目链接 https://www.patest.cn/contests/gplt/L1-019 AC代码 #include <iostream> #include <cstdio&g ...

  10. kafka--producer配置解析

    producer解析 主要是解析一下producer的相关配置以及一些使用场景 相关解析 名称   说明 类型 默认值 有效值 重要性 bootstrap.servers 用于建立与kafka集群连接 ...