IDL语言开发规范
一、支持的类型
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语言开发规范的更多相关文章
- C#语言开发规范-ching版
拙劣之处请大家斧正,愚某虚心接受,如有雷同,不胜荣幸 C#语言开发规范 作者ching 1. 命名规范 a) 类 [规则1-1]使用Pascal规则命名类名,即首字母要大写. eg: Class T ...
- (转载)C#语言开发规范
1. 命名规范a) 类[规则1-1]使用Pascal规则命名类名,即首字母要大写.eg:Class Test{...}[规则1-2]使用能够反映类功能的名词或名词短语命名类.[规则1-3]不要使用“ ...
- C#语言开发规范
1. 命名规范 a) 类 [规则1-1]使用Pascal规则命名类名,即首字母要大写. eg: Class Test { ... } [规则1-2]使用能够反映类功能的名词或名词短语命名类. [规则 ...
- 我的公司培训讲义(1):.NET开发规范教程
这是1年多以前我在公司所做讲座的讲义,现在与园友们分享,欢迎拿去使用.一起讨论.文中有若干思考题,对园友们是小菜一碟.另有设计模式讲义一篇,随后发布.博文上了首页,感谢博客园团队推荐,也感谢所有园友的 ...
- Go语言开发
Go语言圣经(中文版) Go编程语言规范 搭建Go开发及调试环境(LiteIDE + GoClipse) -- Windows篇 Go开发工具 Go命令行操作命令详细介绍 ...
- 【敏捷开发】Android团队开发规范
这里说的开发规范分成目录规范,项目和包名的命名规范,类,方法,变量和常量的命名规范这几种. 目录规范 目录规范——在开发中整体文件夹组织结构. Requirement——需求文档文件夹 Design— ...
- Web前端开发规范文档(google规范)
(Xee:其实没什么规范约束,但是养成一种好习惯,何乐而不为?) 区分大小写 xhtml 区分大小写,xhtml要求 标签名 属性名 值都要小写,并且要有双引号和 标签闭合. css 元素名称以及i ...
- 从" ThinkPHP 开发规范 "看 PHP 的命名规范和开发建议
稍稍水一篇博客,摘抄自Think PHP 的开发规范,很有引导性,我们可以将这些规范实践到原生 PHP 中. 命名规范 使用ThinkPHP开发的过程中应该尽量遵循下列命名规范: 类文件都是以.cla ...
- thinkphp开发规范
1.编写目的 为了更好的提高技术部的工作效率,保证开发的有效性和合理性,并可最大程度的提高程序代码的可读性和可重复利用性,指定此规范.开发团队根据自己的实际情况,可以对本规范进行补充或裁减. ...
随机推荐
- 小木虫emuch遭封禁,新域名muchong.com尚可用
各位虫友: 因为小木虫站点个别虫子违反论坛规定,擅自上传了政治擦边的违规资源.导致小木虫域名 emuch.net 被通信局封禁! 我们第一时间对违规资源进行了删除处理,接下来.我们也将大批量的对站内的 ...
- golang 实现并发计算文件数量
package main import ( "fmt" "io/ioutil" "os" ) func listDir(path strin ...
- 使用npm构建前端项目基本流程
现在各种前端框架, 库文件基本都托管到npm上, 我们平常下载到别人的项目文件, 也基本是用npm 构建的, 不了解点node和npm那是寸步难行. 下面介绍的代码示例不敢说是最佳实践, 但都是我亲自 ...
- appium之Context切换
原文地址http://blog.csdn.net/Mandypan/article/details/51396302 Context切换driver.getContextHandles();//获取页 ...
- MySQL SQL Injection(注入)
如果通过网页接收用户输入,而后再把这些数据插入到数据库中,那么你可能就会碰到 SQL 注入式攻击.本节简要介绍如何防范这种攻击,确保脚本和 MySQL 语句的安全性. 注入式攻击往往发生在要求用户输入 ...
- Bootstrap总结二
参考我的博客:http://www.isedwardtang.com/2017/09/01/bootstrap-primer-2/
- Linux常用命令(6/26)——dd命令和split命令
dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 以可选块长度复制文件,默认情况下从标准输入设备输出到标准输出设备.复制过程中,还可以对文件进行一些转换. dd命令可以指定block的 ...
- C# 中与等于 &= 操作符
MSDN说,x&=y等价于 x=x&y. 整型时&运算符,进行位运算. bool类型时,&运算符,当两边结果都为ture时,结果才为true.
- Nginx 配置文件重写
nginx主配置文件 1.清空过Nginx配置文件,修改: vim /usr/local/nginx/conf/nginx.conf # 以那个账户,账户组来运行nginx user nobody n ...
- ASP.NET MVC 处理404与500错误页面的方法
第一步创建ErrorPageController 第二步添加Oops页面 @{ ViewBag.Title = "Oops"; Layout = "~/Areas/Adm ...