feat(Go-StudyExample):2020/12/16: 新增雪花算法实现

This commit is contained in:
Huangzj
2020-12-16 10:30:08 +08:00
parent 4aaa91df9b
commit 3f0468f88f
5 changed files with 152 additions and 0 deletions
+49
View File
@@ -0,0 +1,49 @@
/*
* @Author : huangzj
* @Time : 2020/12/16 9:32
* @Description
*/
package Snowflake
import (
"fmt"
"sync"
"testing"
)
var wg sync.WaitGroup
func TestSnowflake(t *testing.T) {
w := NewWorker(5, 5)
ch := make(chan uint64, 10000)
count := 10000
wg.Add(count)
defer close(ch)
//并发 count个goroutine 进行 snowFlake ID 生成
for i := 0; i < count; i++ {
go func() {
defer wg.Done()
id, _ := w.NextID()
ch <- id
}()
}
wg.Wait()
m := make(map[uint64]int)
for i := 0; i < count; i++ {
id := <-ch
// 如果 map 中存在为 id 的 key, 说明生成的 snowflake ID 有重复
_, ok := m[id]
if ok {
fmt.Printf("repeat id %d\n", id)
return
} else {
fmt.Printf("id: %d", id)
}
// 将 id 作为 key 存入 map
m[id] = i
}
// 成功生成 snowflake ID
fmt.Println("All", len(m), "snowflake ID Get successed!")
}