简单了解IDL | 青训营笔记

233 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第五天,在今天的学习中,我们学习到了字节中GO后端开发的三件套。其中,听课的时候提到的IDL引起了我的注意,现在就来简单了解一下并学习如何去使用它。

IDL简介

Interface Description Language - 接口描述语言

IDL是用来描述软件组件接口的一种计算机语言,它以中立的方式描述接口,使其能够在不同平台不同编程语言编写的程序间通信。

简单来说,它以一种规范的方式告诉你某个接口需要什么类型的参数以及会返回什么类型的参数。

IDL主要用于RPC服务的描述文档或是用于某些项目的代码生成。

当然,因为业务需要或其他原因,各公司或各项目也会定制对应的IDL,尽管都是描述接口,但会有语法上的不同。这也导致了我们无法系统地只去学习一种语法,而是要对应使用的项目去学习,下面我们就具体看看课上提到的Thrift的IDL(Hertz的代码生成工具也可以使用该IDL)

Thrift - IDL文档:

thrift.apache.org/docs/idl

Hertz - 代码生成工具文档: www.cloudwego.io/zh/docs/her…

Thrift - IDL

数据类型:

没有无符号整数因为某些语言不支持无符号整数

名称含义
bool布尔值
byte8位有符号整数
i1616位有符号整数
i3232位有符号整数
i6464位有符号整数
double64位浮点数
stringUTF8编码字符串
binary未编码的字节序列
容器:

| 名称 | 含义 | | --- | --- | | $list<T>$ | $T$ 类型的有序列表 | | $set<T>$ | $T$ 类型的无序集合,不可重 | | $map<K,V>$ | 无序映射,Key值不可重 |

结构体:
struct struct_name{
    1: type_name_1 member_name_1
    2: type_name_2 member_name_2
    3: type_name_3 member_name_3
    ...
}
服务⭐

接口的具体定义,相当于许多个函数声明,也是IDL最主要的部分。

service service_name{
    return_type_name_1 func_name_1( 1:request_type_name_1 args_1, 2:request_type_name_2 args_2, ...)
    return_type_name_2 func_name_2( 1:request_type_name_1 args_1, 2:request_type_name_2 args_2, ...)
    ...
}
简单样例:

明白了上面一些基础概念后,基本上就能理解课上给出的样例代码了,也可以去试着看看课上提到的笔记项目的IDL文件了:

github.com/cloudwego/k…