为了账号安全,请及时绑定邮箱和手机立即绑定

如何创建自动增量 ID 字段

如何创建自动增量 ID 字段

Go
人到中年有点甜 2022-07-11 15:51:49
我在 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


查看完整回答
反对 回复 2022-07-11
  • 1 回答
  • 0 关注
  • 192 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号