feat: Seeder

This commit is contained in:
Bobo
2025-04-08 19:58:05 +08:00
parent 578cf26ee8
commit 3153ff149f
2 changed files with 21 additions and 21 deletions

View File

@@ -19,17 +19,17 @@ const (
RandomStringSeed SeedType = "RandomString" RandomStringSeed SeedType = "RandomString"
) )
type Randomizer struct { type Seeder struct {
seedType SeedType seedType SeedType
} }
func NewRandomizer(seedType SeedType) *Randomizer { func NewSeeder(seedType SeedType) *Seeder {
return &Randomizer{ return &Seeder{
seedType: seedType, seedType: seedType,
} }
} }
func (r *Randomizer) UnixNano() int64 { func (r *Seeder) UnixNano() int64 {
// 获取当前时间戳 // 获取当前时间戳
timestamp := time.Now().UnixNano() timestamp := time.Now().UnixNano()
@@ -50,11 +50,11 @@ func (r *Randomizer) UnixNano() int64 {
return seed return seed
} }
func (r *Randomizer) MapHash() int64 { func (r *Seeder) MapHash() int64 {
return int64(new(maphash.Hash).Sum64()) return int64(new(maphash.Hash).Sum64())
} }
func (r *Randomizer) CryptoRand() int64 { func (r *Seeder) CryptoRand() int64 {
var b [8]byte var b [8]byte
_, err := cryptoRand.Read(b[:]) _, err := cryptoRand.Read(b[:])
if err != nil { if err != nil {
@@ -66,7 +66,7 @@ func (r *Randomizer) CryptoRand() int64 {
var Alpha = "abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789" var Alpha = "abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789"
func (r *Randomizer) RandomString() int64 { func (r *Seeder) RandomString() int64 {
const size = 8 const size = 8
buf := make([]byte, size) buf := make([]byte, size)
for i := 0; i < size; i++ { for i := 0; i < size; i++ {
@@ -77,7 +77,7 @@ func (r *Randomizer) RandomString() int64 {
return seed return seed
} }
func (r *Randomizer) Seed() int64 { func (r *Seeder) Seed() int64 {
switch r.seedType { switch r.seedType {
default: default:
fallthrough fallthrough
@@ -94,6 +94,6 @@ func (r *Randomizer) Seed() int64 {
// Seed generates a seed based on the specified SeedType. // Seed generates a seed based on the specified SeedType.
func Seed(seedType SeedType) int64 { func Seed(seedType SeedType) int64 {
randomizer := NewRandomizer(seedType) randomizer := NewSeeder(seedType)
return randomizer.Seed() return randomizer.Seed()
} }

View File

@@ -5,45 +5,45 @@ import (
"testing" "testing"
) )
func TestUnixNano(t *testing.T) { func TestUnixNanoSeed(t *testing.T) {
randomizer := NewRandomizer(UnixNanoSeed) seeder := NewSeeder(UnixNanoSeed)
var seeds = make(map[int64]bool) var seeds = make(map[int64]bool)
for i := 0; i < 100000; i++ { for i := 0; i < 100000; i++ {
seed := randomizer.Seed() seed := seeder.Seed()
seeds[seed] = true seeds[seed] = true
} }
fmt.Println("UnixNano Seed", len(seeds)) fmt.Println("UnixNano Seed", len(seeds))
} }
func TestMapHash(t *testing.T) { func TestMapHashSeed(t *testing.T) {
randomizer := NewRandomizer(MapHashSeed) seeder := NewSeeder(MapHashSeed)
var seeds = make(map[int64]bool) var seeds = make(map[int64]bool)
for i := 0; i < 100000; i++ { for i := 0; i < 100000; i++ {
seed := randomizer.Seed() seed := seeder.Seed()
seeds[seed] = true seeds[seed] = true
} }
fmt.Println("MapHash Seed", len(seeds)) fmt.Println("MapHash Seed", len(seeds))
} }
func TestCryptoRand(t *testing.T) { func TestCryptoRandSeed(t *testing.T) {
randomizer := NewRandomizer(CryptoRandSeed) seeder := NewSeeder(CryptoRandSeed)
var seeds = make(map[int64]bool) var seeds = make(map[int64]bool)
for i := 0; i < 100000; i++ { for i := 0; i < 100000; i++ {
seed := randomizer.Seed() seed := seeder.Seed()
seeds[seed] = true seeds[seed] = true
} }
fmt.Println("CryptoRand Seed", len(seeds)) fmt.Println("CryptoRand Seed", len(seeds))
} }
func TestRandomString(t *testing.T) { func TestRandomStringSeed(t *testing.T) {
randomizer := NewRandomizer(RandomStringSeed) seeder := NewSeeder(RandomStringSeed)
var seeds = make(map[int64]bool) var seeds = make(map[int64]bool)
for i := 0; i < 100000; i++ { for i := 0; i < 100000; i++ {
seed := randomizer.Seed() seed := seeder.Seed()
seeds[seed] = true seeds[seed] = true
} }
fmt.Println("RandomString Seed", len(seeds)) fmt.Println("RandomString Seed", len(seeds))