RRuna

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.
Edit this page