23 lines
450 B
Go
23 lines
450 B
Go
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()
|
|
}
|