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