Compare commits

..

No commits in common. "main" and "v1.0.4" have entirely different histories.
main ... v1.0.4

5 changed files with 14 additions and 71 deletions

5
.gitignore vendored
View File

@ -1,4 +1 @@
.ai/
.geminiignore
.gemini
/CODE-FULL.md
go.sum

View File

@ -25,31 +25,25 @@ ID 结构由 `secTag` (1位) + `sec` (5-6位) + `secIndex` (1-5位) + `padding`
## API Reference
### 核心生成器
- `func NewIDMaker(incr func(sec uint64) uint64) *IDMaker`:创建自定义步长的 ID 生成器。
- `var DefaultIDMaker`:默认全局 ID 生成器(单机模式)。
- `func NewIdMaker(incr func(sec uint64) uint64) *IdMaker`:创建自定义步长的 ID 生成器。
- `var DefaultIdMaker`:默认全局 ID 生成器(单机模式)。
### 格式化生成 (语义化方法推荐)
- `func (im *IDMaker) Get8Bytes4KPerSecond() string`8 位长度,并发上限 3,844/s。
- `func (im *IDMaker) Get9Bytes90KPerSecond() string`9 位长度,并发上限 9 万/s。
- `func (im *IDMaker) Get10Bytes14MPerSecond() string`10 位长度,并发上限 1,477 万/s。
- `func (im *IDMaker) Get11Bytes900MPerSecond() string`11 位长度,并发上限 9 亿/s。
- `func (im *IDMaker) Get12BytesUltraPerSecond() string`12 位长度,支持超越 9 亿并发。
### 数据库专用生成 (推荐作为 PK)
- `func (im *IDMaker) Get(size int) string`生成指定长度的随机唯一ID。
- `func (im *IDMaker) GetForMysql(size int) string`MySQL 优化版,自动右旋散列,解决写入热点。
- `func (im *IDMaker) GetForPostgreSQL(size int) string`PostgreSQL 优化版,保持时间局部单调。
### 格式化生成 (推荐作为 PK)
- `func MakeId(size int) string`DefaultIdMaker.Get(size) 的别名。
- `func (im *IdMaker) Get(size int) string`生成随机唯一ID。
- `func (im *IdMaker) GetForMysql(size int) string`MySQL 优化版,自动右旋散列,解决写入热点。
- `func (im *IdMaker) GetForPostgreSQL(size int) string`PostgreSQL 优化版,保持时间局部单调。
## 快速开始
```go
import "apigo.cc/go/id"
// 语义化生成示例 (推荐)
requestId := id.Get10Bytes14MPerSecond()
// 生成一个 12 位长度的唯一ID
newID := id.MakeId(12)
// 数据库主键生成示例
userId := id.DefaultIDMaker.GetForMysql(10)
// 生成一个 10 位长度的 MySQL 友好主键
newID := id.DefaultIdMaker.GetForMysql(10)
```
## 分布式集群扩展示例

6
go.mod
View File

@ -3,8 +3,6 @@ module apigo.cc/go/id
go 1.25.0
require (
apigo.cc/go/encoding v1.3.1
apigo.cc/go/rand v1.3.1
apigo.cc/go/encoding v1.0.4
apigo.cc/go/rand v1.0.4
)
require apigo.cc/go/cast v1.3.3 // indirect

6
go.sum
View File

@ -1,6 +0,0 @@
apigo.cc/go/cast v1.3.3 h1:aln5eDR5DZVWVzZ/y5SJh1gQNgWv2sT82I25NaO9g34=
apigo.cc/go/cast v1.3.3/go.mod h1:lGlwImiOvHxG7buyMWhFzcdvQzmSaoKbmr7bcDfUpHk=
apigo.cc/go/encoding v1.3.1 h1:y8O58KYAyulkThg1O2ji2BqjnFoSvk42sit9I3z+K7Y=
apigo.cc/go/encoding v1.3.1/go.mod h1:xAJk5b83VZ31mXMTnyp0dfMoBKfT/AHDn0u+cQfojgY=
apigo.cc/go/rand v1.3.1 h1:7FvsI6PtQ5XrWER0dTiLVo0p7GIxRidT/TBKhVy93j8=
apigo.cc/go/rand v1.3.1/go.mod h1:mZ/4Soa3bk+XvDaqPWJuUe1bfEi4eThBj1XmEAuYxsk=

40
id.go
View File

@ -103,26 +103,6 @@ func (im *IDMaker) Get(size int) string {
return im.get(size, false, false)
}
func (im *IDMaker) Get8Bytes4KPerSecond() string {
return im.get(8, false, false)
}
func (im *IDMaker) Get9Bytes90KPerSecond() string {
return im.get(9, false, false)
}
func (im *IDMaker) Get10Bytes14MPerSecond() string {
return im.get(10, false, false)
}
func (im *IDMaker) Get11Bytes900MPerSecond() string {
return im.get(11, false, false)
}
func (im *IDMaker) Get12BytesUltraPerSecond() string {
return im.get(12, false, false)
}
func (im *IDMaker) GetForMysql(size int) string {
return im.get(size, true, true)
}
@ -130,23 +110,3 @@ func (im *IDMaker) GetForMysql(size int) string {
func (im *IDMaker) GetForPostgreSQL(size int) string {
return im.get(size, true, false)
}
func Get8Bytes4KPerSecond() string {
return DefaultIDMaker.Get8Bytes4KPerSecond()
}
func Get9Bytes90KPerSecond() string {
return DefaultIDMaker.Get9Bytes90KPerSecond()
}
func Get10Bytes14MPerSecond() string {
return DefaultIDMaker.Get10Bytes14MPerSecond()
}
func Get11Bytes900MPerSecond() string {
return DefaultIDMaker.Get11Bytes900MPerSecond()
}
func Get12BytesUltraPerSecond() string {
return DefaultIDMaker.Get12BytesUltraPerSecond()
}