ID
Random IDs and Snowflake IDs
id provides random IDs, hexadecimal IDs, and numeric ID formatting. Snowflake IDs live in the separate id/snowflake module, so the related dependency is introduced only after installation.
Install
go get github.com/duxweb/runa/id
Snowflake ID:
go get github.com/duxweb/runa/id/snowflake
Random IDs
value, err := id.Random(16)
hexValue, err := id.RandomHex(16)
_ = value
_ = hexValue
_ = err
Random(16) returns a URL-safe string. RandomHex(16) returns a 32-character hexadecimal string.
MustRandom
traceID := id.MustRandom(16)
_ = traceID
MustRandom is suitable for initialization. It panics if the random source fails.
Numeric formatting
text := id.Format(123456789)
_ = text
Snowflake
import snow "github.com/duxweb/runa/id/snowflake"
generator := snow.MustSnowflake(1)
value, err := generator.New(context.Background())
_ = value
_ = err
Common mistakes
Treating random IDs as ordered primary keys
Random IDs are good for public identifiers. Do not expect them to be sorted like database sequences.
Reusing one Snowflake node ID on every machine
Snowflake generators need unique node IDs across machines to avoid collisions.
Creating generators repeatedly on hot paths
Create long-lived generators once and reuse them when generating many IDs.
API quick reference
id.Random(size)generates a random string.id.MustRandom(size)generates a random string or panics.id.RandomHex(size)generates a hexadecimal string.id.Format(value)formats a numeric ID.snowflake.NewSnowflake(nodeID)creates a Snowflake ID generator.snowflake.MustSnowflake(nodeID)creates a generator or panics.