feat: 实现并发安全的 ULID trace ID 生成器
This commit is contained in:
22
backend/internal/trace/id.go
Normal file
22
backend/internal/trace/id.go
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
package trace
|
||||||
|
|
||||||
|
import (
|
||||||
|
cryptorand "crypto/rand"
|
||||||
|
"sync"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/oklog/ulid/v2"
|
||||||
|
)
|
||||||
|
|
||||||
|
var entropyPool = sync.Pool{
|
||||||
|
New: func() interface{} {
|
||||||
|
return ulid.Monotonic(cryptorand.Reader, 0)
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
// GenerateTraceID 生成并发安全的 ULID trace ID
|
||||||
|
func GenerateTraceID() string {
|
||||||
|
entropy := entropyPool.Get().(*ulid.MonotonicEntropy)
|
||||||
|
defer entropyPool.Put(entropy)
|
||||||
|
return ulid.MustNew(ulid.Timestamp(time.Now()), entropy).String()
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user