如何创建自动增量 ID 字段

我在 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。


我只是不知道如何在结构中解决这个问题。


非常感谢这里的任何帮助或指示。


人到中年有点甜
浏览 193回答 1
1回答

30秒到达战场

创建一个自定义类型来管理唯一的递增 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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go