English | 简体中文
a sequence number generator based on Gorm.
Need a human call number on some cases(Restaurant etc...).
Base examples
db, err := gorm.Open("mysql", "root:root@tcp(127.0.0.1:3306)/test?parseTime=true")
if err != nil {
fmt.Println(fmt.Sprintln(err))
}
defer db.Close()
InitTable(db)
num, err := NewSeqNoGenerator(db, "Order").SeqFormat("Order%05d").Step(5).Next()
if err != nil {
fmt.Println(fmt.Sprintln(err))
}
fmt.Printf("%s\n", num)
Locking is required for goroutine
db, err := gorm.Open("mysql", "root:root@tcp(127.0.0.1:3306)/test?parseTime=true")
if err != nil {
fmt.Println(fmt.Sprintln(err))
}
defer db.Close()
InitTable(db)
arrs := [5]string{"test-1", "test-2", "test-3", "test-4", "test-5"}
var mutex sync.Mutex
for _, v := range arrs {
fmt.Printf("start %s\n", v)
go func(v string) {
for n := 0; n < 100; n++ {
mutex.Lock()
num, err := NewSeqNoGenerator(db, v).Next()
if err != nil {
fmt.Println(fmt.Sprintln(err))
}
fmt.Printf("%s --- %s\n", v, num)
mutex.Unlock()
}
time.Sleep(2 * time.Second)
fmt.Printf("end %s\n", v)
}(v)
}
time.Sleep(2 * time.Second)
fmt.Println("end")
Logic ID
represents a concrete business logic(like order
,user
).
Incremental step. default is 1
Starting number. default is 0
go fmt format. default is %05d