Awesome
go-nanoid
This module is a Go implementation of ai/nanoid.
go get github.com/jaevor/go-nanoid
import (
"log"
"github.com/jaevor/go-nanoid"
)
func main() {
gen, err := nanoid.Canonic()
if err != nil {
panic(err)
}
id1 := gen()
log.Printf("ID 1: %s", id1) // eLySUP3NTA48paA9mLK3V
// Makes sense to use CustomASCII since 0-9 is ASCII.
decenaryID, err := nanoid.CustomASCII("0123456789", 12)
if err != nil {
panic(err)
}
id2 := decenaryID()
log.Printf("ID 2: %s", id2) // 817411560404
}
Note
This module's functions use an internal buffered slice of random bytes, and thus also a mutex. This slight (but constant) overhead of memory per generator allows it to be very efficient, but may not be ideal if you are only generating an ID every now and then.
Security
Benchmarks
All benchmarks & tests are in nanoid_test.go.
These are all benchmarks of nanoid.Standard(#)
# of characters & # of IDs | benchmark screenshot |
---|---|
8, ~21,800,000 | <img src="img/benchmark-8.png"> |
21, ~16,400,000 | <img src="img/benchmark-21.png"> |
36, ~11,500,000 | <img src="img/benchmark-36.png"> |
255, ~2,500,000 | <img src="img/benchmark-255.png"> |