Documentation ¶
Index ¶
- Variables
- func Compare(a, b KSUID) int
- func IsSorted(ids []KSUID) bool
- func SetRand(r io.Reader)
- func Sort(ids []KSUID)
- type CompressedSet
- type CompressedSetIter
- type KSUID
- func (i KSUID) Append(b []byte) []byte
- func (i KSUID) Bytes() []byte
- func (i KSUID) Get() interface{}
- func (i KSUID) IsNil() bool
- func (i KSUID) MarshalBinary() ([]byte, error)
- func (i KSUID) MarshalText() ([]byte, error)
- func (id KSUID) Next() KSUID
- func (i KSUID) Payload() []byte
- func (id KSUID) Prev() KSUID
- func (i *KSUID) Scan(src interface{}) error
- func (i *KSUID) Set(s string) error
- func (i KSUID) String() string
- func (i KSUID) Time() time.Time
- func (i KSUID) Timestamp() uint32
- func (i *KSUID) UnmarshalBinary(b []byte) error
- func (i *KSUID) UnmarshalText(b []byte) error
- func (i KSUID) Value() (driver.Value, error)
- type Sequence
Constants ¶
This section is empty.
Variables ¶
var FastRander = newRBG()
FastRander is an io.Reader that uses math/rand and is optimized for generating 16 bytes KSUID payloads. It is intended to be used as a performance improvements for programs that have no need for cryptographically secure KSUIDs and are generating a lot of them.
Functions ¶
Types ¶
type CompressedSet ¶
type CompressedSet []byte
CompressedSet is an immutable data type which stores a set of KSUIDs.
func AppendCompressed ¶
func AppendCompressed(set []byte, ids ...KSUID) CompressedSet
AppendCompressed uses the given byte slice as pre-allocated storage space to build a KSUID set.
Note that the set uses a compression technique to store the KSUIDs, so the resuling length is not 20 x len(ids). The rule of thumb here is for the given byte slice to reserve the amount of memory that the application would be OK to waste.
func Compress ¶
func Compress(ids ...KSUID) CompressedSet
Compress creates and returns a compressed set of KSUIDs from the list given as arguments.
func (CompressedSet) GoString ¶
func (set CompressedSet) GoString() string
String satisfies the fmt.GoStringer interface, returns a Go representation of the set.
func (CompressedSet) Iter ¶
func (set CompressedSet) Iter() CompressedSetIter
Iter returns an iterator that produces all KSUIDs in the set.
func (CompressedSet) String ¶
func (set CompressedSet) String() string
String satisfies the fmt.Stringer interface, returns a human-readable string representation of the set.
type CompressedSetIter ¶
type CompressedSetIter struct { // KSUID is modified by calls to the Next method to hold the KSUID loaded // by the iterator. KSUID KSUID // contains filtered or unexported fields }
CompressedSetIter is an iterator type returned by Set.Iter to produce the list of KSUIDs stored in a set.
Here's is how the iterator type is commonly used:
for it := set.Iter(); it.Next(); { id := it.KSUID // ... }
CompressedSetIter values are not safe to use concurrently from multiple goroutines.
func (*CompressedSetIter) Next ¶
func (it *CompressedSetIter) Next() bool
Next moves the iterator forward, returning true if there a KSUID was found, or false if the iterator as reached the end of the set it was created from.
type KSUID ¶
type KSUID [byteLength]byte
KSUIDs are 20 bytes:
00-03 byte: uint32 BE UTC timestamp with custom epoch 04-19 byte: random "payload"
func New ¶
func New() KSUID
Generates a new KSUID. In the strange case that random bytes can't be read, it will panic.
func (KSUID) Append ¶
Append appends the string representation of i to b, returning a slice to a potentially larger memory area.
func (KSUID) Get ¶
func (i KSUID) Get() interface{}
Get satisfies the flag.Getter interface, making it possible to use KSUIDs as part of of the command line options of a program.
func (KSUID) MarshalBinary ¶
func (KSUID) MarshalText ¶
func (*KSUID) Scan ¶
Scan implements the sql.Scanner interface. It supports converting from string, []byte, or nil into a KSUID value. Attempting to convert from another type will return an error.
func (*KSUID) Set ¶
Set satisfies the flag.Value interface, making it possible to use KSUIDs as part of of the command line options of a program.
func (KSUID) Timestamp ¶
The timestamp portion of the ID as a bare integer which is uncorrected for KSUID's special epoch.
func (*KSUID) UnmarshalBinary ¶
func (*KSUID) UnmarshalText ¶
type Sequence ¶
type Sequence struct { // The seed is used as base for the KSUID generator, all generated KSUIDs // share the same leading 18 bytes of the seed. Seed KSUID // contains filtered or unexported fields }
Sequence is a KSUID generator which produces a sequence of ordered KSUIDs from a seed.
Up to 65536 KSUIDs can be generated by for a single seed.
A typical usage of a Sequence looks like this:
seq := ksuid.Sequence{ Seed: ksuid.New(), } id, err := seq.Next()
Sequence values are not safe to use concurrently from multiple goroutines.