Struct 标签
Fory Go 通过 struct tag 自定义字段级序列化行为,从而精细控制每个字段如何序列化。
标签语法
Fory struct tag 的通用格式如下:
type MyStruct struct {
Field Type `fory:"option1,option2=value"`
}
多个选项使用逗号(,)分隔。
可用标签
字段 ID
使用 id=N 为字段分配数值 ID,以获得更紧凑编码:
type User struct {
ID int64 `fory:"id=0"`
Name string `fory:"id=1"`
Age int32 `fory:"id=2"`
}
收益:
- 序列化体积更小(数值 ID 替代字段名)
- 序列化/反序列化更快
- 跨语言兼容场景下更推荐
注意:
- 同一 struct 内 ID 必须唯一
- ID 必须
>= 0 - 未指定时使用字段名(payload 更大)
忽略字段
使用 - 将字段排除在序列化之外:
type User struct {
ID int64
Name string
Password string `fory:"-"` // Not serialized
}
Password 不会进入序列化结果,反序列化后将保持该类型零值。
可空控制
使用 nullable 控制是否为指针字段写入 null 标记:
type Record struct {
// Write null flag for this field (allows nil values)
OptionalData *Data `fory:"nullable"`
// Skip null flag (field must not be nil)
RequiredData *Data `fory:"nullable=false"`
}
注意:
- 仅适用于指针、slice、map 字段
nullable=false时,序列化 nil 会报错- 默认是
false(不写 null 标记)
引用跟踪
可为 slice、map、或“指向 struct 的指针字段”设置字段级引用跟踪:
type Container struct {
// Enable reference tracking for this field
SharedData *Data `fory:"ref"`
// Disable reference tracking for this field
SimpleData *Data `fory:"ref=false"`
}
注意:
- 适用于 slice、map 与“指向 struct 的指针字段”
- 指向原生类型的指针(如
*int、*string)不能使用该标签 - 默认
ref=false(不开启引用跟踪) - 全局
WithTrackRef(false)时,字段级 ref 标签会被忽略 - 全局
WithTrackRef(true)时,可用ref=false对单字段禁用
适用场景:
- 可能出现共享或循环引用的字段
- 可明确唯一的字段可禁用(性能优化)