我在 JSON 文件中定义了一组员工:type PrimitiveEmployee struct { PrimitiveID string `xml:"ID,attr"` ContractID []string `xml:"ContractID"`}ID和都是ContractID字母,但它们不一定是连续的字母序列。例如,可能存在一个PrimitiveID=A的员工和另一个PrimitiveID=C的员工,但不存在PrimitiveID=B的员工。我想将此数据转换为:type Employee struct { ID int PrimitiveID string Contracts []Contract}问题是,我希望员工 ID 从 0 开始,并在每次初始化结构时递增 1。有点像数据库中的自动增量 ID 或枚举中的 iota。PrimitiveID=A的员工将被自动创建为ID=0,而PrimitiveID=C的员工将获得ID=1。我只是不知道如何在结构中解决这个问题。非常感谢这里的任何帮助或指示。
1 回答
30秒到达战场
TA贡献1828条经验 获得超6个赞
创建一个自定义类型来管理唯一的递增 ID:
type autoInc struct {
sync.Mutex // ensures autoInc is goroutine-safe
id int
}
func (a *autoInc) ID() (id int) {
a.Lock()
defer a.Unlock()
id = a.id
a.id++
return
}
因此,您可以在目标位置或包级别使用它:
var ai autoInc // global instance
然后,您可以创建“构造函数”来利用它:
func NewEmployee() *Employee {
return &Employee{
ID: ai.ID(),
}
}
Employee然后可以执行编组 JSON 数据并保留 ID - 前提是 JSON 数据不包含ID标签。
https://play.golang.org/p/0iTaQSzTPZ_j
- 1 回答
- 0 关注
- 192 浏览
添加回答
举报
0/150
提交
取消
