|
- package main
-
- import (
- "C"
- "fmt"
- "time"
- "yitidgen/idgen"
- "yitidgen/regworkerid"
- )
-
- //export SetOptions
- func SetOptions(workerId uint16) {
- var options = idgen.NewIdGeneratorOptions(workerId)
- idgen.SetIdGenerator(options)
- }
-
- //export NextId
- func NextId() int64 {
- return idgen.NextId()
- }
-
- // 注册一个 WorkerId,会先注销所有本机已注册的记录
- //export RegisterOne
- func RegisterOne(ip *C.char, port int32, password *C.char, maxWorkerId int32) int32 {
- return regworkerid.RegisterOne(C.GoString(ip), port, C.GoString(password), maxWorkerId)
- }
-
- // 注册多个 WorkerId,会先注销所有本机已注册的记录
- ///export RegisterMany
- func RegisterMany(ip *C.char, port int32, password *C.char, maxWorkerId int32, totalCount int32) []int32 {
- //values := regworkerid.RegisterMany(C.GoString(ip), port, C.GoString(password), maxWorkerId, totalCount)
- //return (*C.int)(unsafe.Pointer(&values))
- return regworkerid.RegisterMany(C.GoString(ip), port, C.GoString(password), maxWorkerId, totalCount);
- }
-
- // 注销本机已注册的 WorkerId
- //export UnRegister
- func UnRegister() {
- regworkerid.UnRegister()
- }
-
- // 检查本地WorkerId是否有效(0-有效,其它-无效)
- //export Validate
- func Validate(workerId int32) int32 {
- return regworkerid.Validate(workerId)
- }
-
- func main() {
- const testGenId = true // 测试设置
-
- if testGenId {
- // 自定义参数
- var options = idgen.NewIdGeneratorOptions(1)
- options.WorkerIdBitLength = 6
- options.SeqBitLength = 6
- options.BaseTime = time.Date(2020, 2, 20, 2, 20, 2, 20, time.UTC).UnixNano() / 1e6
- idgen.SetIdGenerator(options)
-
- var genCount = 50000
- for {
- var begin = time.Now().UnixNano() / 1e3
- for i := 0; i < genCount; i++ {
- // 生成ID
- idgen.NextId()
- }
- var end = time.Now().UnixNano() / 1e3
-
- fmt.Println(end - begin)
- time.Sleep(time.Duration(1000) * time.Millisecond)
- }
- } else {
- workerIdList := regworkerid.RegisterMany("localhost", 6379, "", 4, 3)
- for _, value := range workerIdList {
- fmt.Println("注册的WorkerId:", value)
- }
-
- //var workerId = regworkerid.RegisterOne("localhost", 6379, "", 4)
- //fmt.Println("注册的WorkerId:", workerId)
-
- fmt.Println("end")
- time.Sleep(time.Duration(300) * time.Second)
- }
- }
-
- // windows:
- // go build -o ./target/yitidgengo.dll -buildmode=c-shared main.go
-
- // linux init: go install -buildmode=shared -linkshared std
- // go build -o ./target/yitidgengo.so -buildmode=c-shared main.go
|