Documentation ¶
Overview ¶
Package dxyflake implements dxyflake, duoxieyun distributed unique ID generator inspired by Twitter's Snowflake.
+---------------------------------------------------------------------------------------+ | 1 Bit Unused | 41 Bit Timestamp | 5 Bit NodeID | 5 Bit ServiceID | 12 Bit Sequence ID | +---------------------------------------------------------------------------------------+
41 bits for time in units of 10 msec (697 years)
5 bits for a machine id (32 nodes) 5 bits for a service id (32 services per node)
12 bits for a sequence number (0 ~ 4095)
Index ¶
- Constants
- Variables
- func Decompose(id ID) map[string]int64
- func NewDxyflake(st Settings) *dxyflake
- type ID
- func ParseBase2(id string) (ID, error)
- func ParseBase32(b []byte) (ID, error)
- func ParseBase36(id string) (ID, error)
- func ParseBase58(b []byte) (ID, error)
- func ParseBase64(id string) (ID, error)
- func ParseBytes(id []byte) (ID, error)
- func ParseInt64(id int64) ID
- func ParseIntBytes(id [8]byte) ID
- func ParseString(id string) (ID, error)
- func (f ID) Base2() string
- func (f ID) Base32() string
- func (f ID) Base36() string
- func (f ID) Base58() string
- func (f ID) Base64() string
- func (f ID) Bytes() []byte
- func (f ID) Int64() int64
- func (f ID) IntBytes() [8]byte
- func (f ID) LeadingZerosString(zeroN uint8) string
- func (f ID) MarshalJSON() ([]byte, error)
- func (f ID) String() string
- func (f *ID) UnmarshalJSON(b []byte) error
- type JSONSyntaxError
- type Settings
Constants ¶
const ( BitLenTime = 41 // bit length of time BitLenMachineID = 5 // bit length of machineID BitLenServiceID = 5 // bit length of serviceID BitLenSequence = 12 // bit length of sequence number )
These constants are the bit lengths of dxyflake ID parts.
Variables ¶
var ErrInvalidBase32 = errors.New("invalid base32")
ErrInvalidBase32 is returned by ParseBase32 when given an invalid []byte
var ErrInvalidBase58 = errors.New("invalid base58")
ErrInvalidBase58 is returned by ParseBase58 when given an invalid []byte
Functions ¶
func NewDxyflake ¶
func NewDxyflake(st Settings) *dxyflake
NewDxyflake returns a new dxyflake configured with the given Settings. NewDxyflake returns nil in the following cases: - Settings.StartTime is ahead of the current time. - Settings.MachineID returns an error. - Settings.ServiceID returns an error. - Settings.CheckMachineID returns false. - Settings.CheckServiceID returns false.
Types ¶
type ID ¶
type ID int64
An ID is a custom type used for a dxyflake ID. This is used so we can attach methods onto the ID.
func ParseBase2 ¶
ParseBase2 converts a Base2 string into a dxyflake ID
func ParseBase32 ¶
ParseBase32 parses a base32 []byte into a dxyflake ID NOTE: There are many different base32 implementations so becareful when doing any interoperation.
func ParseBase36 ¶
ParseBase36 converts a Base36 string into a dxyflake ID
func ParseBase58 ¶
ParseBase58 parses a base58 []byte into a dxyflake ID
func ParseBase64 ¶
ParseBase64 converts a base64 string into a dxyflake ID
func ParseBytes ¶
ParseBytes converts a byte slice into a dxyflake ID
func ParseIntBytes ¶
ParseIntBytes converts an array of bytes encoded as big endian integer as a dxyflake ID
func ParseString ¶
ParseString converts a string into a dxyflake ID
func (ID) Base32 ¶
Base32 uses the z-base-32 character set but encodes and decodes similar to base58, allowing it to create an even smaller result string. NOTE: There are many different base32 implementations so becareful when doing any interoperation.
func (ID) IntBytes ¶
IntBytes returns an array of bytes of the dxyflake ID, encoded as a big endian integer.
func (ID) LeadingZerosString ¶
LeadingZerosString returns a string of the dxyflake ID, leading zeros
func (ID) MarshalJSON ¶
MarshalJSON returns a json byte array string of the dxyflake ID.
func (*ID) UnmarshalJSON ¶
UnmarshalJSON converts a json byte array of a dxyflake ID into an ID type.
type JSONSyntaxError ¶
type JSONSyntaxError struct {
// contains filtered or unexported fields
}
A JSONSyntaxError is returned from UnmarshalJSON if an invalid ID is provided.
func (JSONSyntaxError) Error ¶
func (j JSONSyntaxError) Error() string
type Settings ¶
type Settings struct { StartTime time.Time MachineID func() (uint16, error) ServiceID func() (uint16, error) CheckMachineID func(uint16) bool CheckServiceID func(uint16) bool }
Settings configures dxyflake:
StartTime is the time since which the dxyflake time is defined as the elapsed time. If StartTime is 0, the start time of the dxyflake is set to "2021-10-01 00:00:00 +0000 UTC". If StartTime is ahead of the current time, dxyflake is not created.
MachineID returns the unique ID of the dxyflake instance. If MachineID returns an error, dxyflake is not created. If MachineID is nil, default MachineID(0) is used.
ServiceID returns the unique ID of the dxyflake service per machine. If ServiceID returns an error, dxyflake is not created. If ServiceID is nil, default ServiceID(0) is used.
CheckMachineID validates the uniqueness of the machine ID. If CheckMachineID returns false, dxyflake is not created. If CheckMachineID is nil, no validation is done.
CheckServiceID validates the uniqueness of the service ID. If CheckServiceID returns false, dxyflake is not created. If CheckServiceID is nil, no validation is done.
func (*Settings) StartTimeSet ¶
StartTimeSet set start time