Skip to content

A distributed unique ID generator of using Sonyflake and encoded by Base58

License

Notifications You must be signed in to change notification settings

osamingo/indigo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

61 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Indigo

GitHub Actions codecov Go Report Card codebeat badge Maintainability GoDoc GitHub license

About

  • A distributed unique ID generator of using Sonyflake and encoded by Base58.
  • ID max length is 11 characters by unsigned int64 max value.
  • An Encoder can change your original encoder ;)

Install

$ go get github.com/osamingo/indigo@latest

Usage

package main

import (
	"log"
	"sync"
	"time"

	"github.com/osamingo/indigo"
)

var g *indigo.Generator

func init() {
	t := time.Unix(1257894000, 0) // 2009-11-10 23:00:00 UTC
	g = indigo.New(nil, indigo.StartTime(t))
	_, err := g.NextID()
	if err != nil {
		log.Fatalln(err)
	}
}

func main() {

	wg := sync.WaitGroup{}
	wg.Add(100)
	for i := 0; i < 100; i++ {
		go func() {
			defer wg.Done()
			id, err := g.NextID()
			if err != nil {
				log.Fatalln(err)
			} else {
				log.Println("ID:", id)
			}
		}()
	}

	wg.Wait()
}

Benchmark

# Machine: MacBook Pro (14-inch, 2021)
# CPU    : Apple M1 Pro
# Memory : 32 GB

goos: darwin
goarch: arm64
pkg: github.com/osamingo/indigo
BenchmarkGenerator_NextID-10        30079       39191 ns/op        7 B/op     1 allocs/op
PASS

Bibliography

  • Sonyflake - A distributed unique ID generator inspired by Twitter's Snowflake.
  • Base58 - Base58 is a group of binary-to-text encoding schemes used to represent large integers as alphanumeric text.

License

Released under the MIT License.