Thrift 核心语法规则

2025-12-23 22:19:54

世界杯足球球队排名

Thrift 有许多语法规则,这里只介绍核心语法。 1.注释 注释用于对代码进行解释说明,Thrift 支持两种注释方式: 单行注释:以双斜杠 // 开头,...

Thrift 有许多语法规则,这里只介绍核心语法。

1.注释

注释用于对代码进行解释说明,Thrift 支持两种注释方式:

单行注释:以双斜杠 // 开头,从 // 到行尾的内容都会被视为注释。例如:

// 这是一个单行注释

多行注释:以 /* 开头,以 */ 结尾,中间的所有内容都是注释。示例如下:

/*

这是一个多行注释

可以跨越多行

*/

2.命名空间(Namespace)

命名空间用于指定生成代码在不同编程语言中的包名或模块名,避免命名冲突。语法格式为:

namespace <语言> <包名/模块名>

例如,为 Go 语言指定命名空间:

namespace go example.service

这表示生成的 Go 代码会位于 example.service 包下。

3.数据类型

基本数据类型

bool:布尔类型,值为 true 或 false。byte:字节类型,通常用于表示 8 位整数。i16:16 位有符号整数。i32:32 位有符号整数。i64:64 位有符号整数。double:双精度浮点数。string:字符串类型。

复杂数据类型

结构体(Struct):用于定义自定义的数据结构,类似于面向对象编程中的类。语法如下:

struct <结构体名> {

<字段编号>: <字段修饰符> <字段类型> <字段名>[ = <默认值>],

// 可以有多个字段

}

示例:

struct Person {

1: required string name,

2: optional i32 age = 0,

3: optional string address

}

这里的 required 表示字段必须有值,optional 表示字段可以为空。

枚举(Enum):用于定义一组命名的常量值。语法如下:

enum <枚举名> {

<枚举项1>[ = <值1>],

<枚举项2>[ = <值2>],

// 可以有多个枚举项

}

示例:

enum Color {

RED = 1,

GREEN = 2,

BLUE = 3

}

集合类型:

list<元素类型>:表示有序的元素列表。例如,list 表示字符串列表。set<元素类型>:表示无序且唯一的元素集合。例如,set 表示整数集合。map<键类型, 值类型>:表示键值对的映射。例如,map 表示字符串到整数的映射。

4. 服务(Service)

服务用于定义远程调用的接口,包含一系列方法。语法如下:

service <服务名> {

<返回类型> <方法名>(<参数列表>)[ throws (<异常列表>)];

// 可以有多个方法

}

示例:

service UserService {

Person GetUser(1: i32 userId) throws (1: UserNotFoundException notFound),

void UpdateUser(1: Person user)

}

这里定义了一个 UserService 服务,包含 GetUser 和 UpdateUser 两个方法。GetUser 方法可能会抛出 UserNotFoundException 异常。

5. 异常(Exception)

异常用于在服务方法出现错误时抛出。语法与结构体类似:

exception <异常名> {

<字段编号>: <字段修饰符> <字段类型> <字段名>[ = <默认值>],

// 可以有多个字段

}

示例:

exception UserNotFoundException {

1: string message

}

6.常量定义

可以定义常量,语法如下:

const <类型> <常量名> = <值>

示例:

const i32 MAX_USERS = 100

7.包含其他 Thrift 文件

可以使用 include 指令包含其他 Thrift 文件,以复用其中的定义。语法如下:

include "<文件名>"

示例:

include "common.thrift"

这样就可以在当前文件中使用 common.thrift 中定义的类型和服务。