代码生成
Experimental Feature
代码生成是 Fory Go 中的实验性特性。其 API 和行为可能会在后续版本中发生变化。标准运行时路径仍是大多数场景下稳定且推荐的做法。
Fory Go 为性能关键路径提供可选的 AOT 代码生成。它会提前生成专用序列化器,并增加编译期 shape 校验。
为什么使用代码生成?
| 方面 | 标准路径 | 代码生成 |
|---|---|---|
| 接入成本 | 零配置 | 需要 go generate |
| 性能 | 已经很优秀 | 热路径上更快 |
| 类型安全 | 运行时校验 | 编译期校验 |
| 维护成本 | 自动完成 | 需要重新生成 |
适合使用代码生成的场景:
- 需要极致性能
- 很看重编译期类型安全
- 热路径对性能非常敏感
适合继续使用标准路径的场景:
- 更偏好简单接入
- 类型经常变化
- 需要动态类型
- 不希望引入代码生成复杂度
安装
安装 fory 生成器二进制:
go install github.com/apache/fory/go/fory/cmd/fory@latest
GO111MODULE=on go get -u github.com/apache/fory/go/fory/cmd/fory
确保 $GOBIN 或 $GOPATH/bin 已加入 PATH。
基本用法
步骤 1:标注结构体
在结构体上方添加 //fory:generate 注释:
package models
//fory:generate
type User struct {
ID int64 `json:"id"`
Name string `json:"name"`
}
//fory:generate
type Order struct {
ID int64
Customer string
Total float64
}
步骤 2:添加 Go Generate 指令
添加 go:generate 指令(每个文件或每个包一次即可):
//go:generate fory -file models.go