Rename to snowflake

This commit is contained in:
Bruce Marriner 2016-06-01 16:12:53 -05:00
parent 7e351e0315
commit bf4c51fc2b
3 changed files with 18 additions and 16 deletions

View File

@ -1,12 +1,12 @@
flake snowflake
==== ====
[![GoDoc](https://godoc.org/github.com/bwmarrin/flake?status.svg)](https://godoc.org/github.com/bwmarrin/flake) [![Go report](http://goreportcard.com/badge/bwmarrin/flake)](http://goreportcard.com/report/bwmarrin/flake) [![Build Status](https://travis-ci.org/bwmarrin/flake.svg?branch=master)](https://travis-ci.org/bwmarrin/flake) [![Discord Gophers](https://img.shields.io/badge/Discord%20Gophers-%23info-blue.svg)](https://discord.gg/0f1SbxBZjYq9jLBk) [![GoDoc](https://godoc.org/github.com/bwmarrin/snowflake?status.svg)](https://godoc.org/github.com/bwmarrin/snowflake) [![Go report](http://goreportcard.com/badge/bwmarrin/snowflake)](http://goreportcard.com/report/bwmarrin/snowflake) [![Build Status](https://travis-ci.org/bwmarrin/snowflake.svg?branch=master)](https://travis-ci.org/bwmarrin/snowflake) [![Discord Gophers](https://img.shields.io/badge/Discord%20Gophers-%23info-blue.svg)](https://discord.gg/0f1SbxBZjYq9jLBk)
flake is a [Go](https://golang.org/) package that provides snowflake is a [Go](https://golang.org/) package that provides
* A very simple Twitter snowflake generator. * A very simple Twitter snowflake generator.
* Methods to parse existing snowflake IDs. * Methods to parse existing snowflake IDs.
* Methods to convert a snowflake ID into several other data types. * Methods to convert a snowflake ID into several other data types.
* JSON Marshal/Unmarshal functions to easily use flake IDs within a JSON API. * JSON Marshal/Unmarshal functions to easily use snowflake IDs within a JSON API.
**For help with this package or general Go discussion, please join the [Discord **For help with this package or general Go discussion, please join the [Discord
Gophers](https://discord.gg/0f1SbxBZjYq9jLBk) chat server.** Gophers](https://discord.gg/0f1SbxBZjYq9jLBk) chat server.**
@ -19,12 +19,12 @@ This assumes you already have a working Go environment, if not please see
[this page](https://golang.org/doc/install) first. [this page](https://golang.org/doc/install) first.
```sh ```sh
go get github.com/bwmarrin/flake go get github.com/bwmarrin/snowflake
``` ```
### Usage ### Usage
Import the package into your project then construct a new flake Node using a Import the package into your project then construct a new snowflake Node using a
unique node number from 0 to 1023. With the node object call the Generate() unique node number from 0 to 1023. With the node object call the Generate()
method to generate and return a unique snowflake ID. method to generate and return a unique snowflake ID.
@ -40,13 +40,13 @@ package main
import ( import (
"fmt" "fmt"
"github.com/bwmarrin/flake" "github.com/bwmarrin/snowflake"
) )
func main() { func main() {
// Create a new Node with a Node number of 1 // Create a new Node with a Node number of 1
node, err := flake.NewNode(1) node, err := snowflake.NewNode(1)
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
return return
@ -78,15 +78,15 @@ func main() {
### Performance ### Performance
The flake generator should be sufficiently fast enough on most systems to This snowflake generator should be sufficiently fast enough on most systems to
generate 4096 unique ID's per millisecond. This is the maximum that the generate 4096 unique ID's per millisecond. This is the maximum that the
snowflake ID format supports. That is, around 243-244 nanoseconds per operation. snowflake ID format supports. That is, around 243-244 nanoseconds per operation.
Since the flake generator is single threaded the primary limitation will be Since the snowflake generator is single threaded the primary limitation will be
the maximum speed of a single processor on your system. the maximum speed of a single processor on your system.
To benchmark the generator on your system run the following command inside the To benchmark the generator on your system run the following command inside the
flake package directory. snowflake package directory.
```sh ```sh
go test -bench=. go test -bench=.
@ -94,4 +94,4 @@ go test -bench=.
If your curious, check out this commit that shows benchmarks that compare a few If your curious, check out this commit that shows benchmarks that compare a few
different ways of implementing a snowflake generator in Go. different ways of implementing a snowflake generator in Go.
* https://github.com/bwmarrin/flake/tree/9befef8908df13f4102ed21f42b083dd862b5036 * https://github.com/bwmarrin/snowflake/tree/9befef8908df13f4102ed21f42b083dd862b5036

View File

@ -1,5 +1,5 @@
// Package flake provides a very simple Twitter snowflake generator and parser. // Package snowflake provides a very simple Twitter snowflake generator and parser.
package flake package snowflake
import ( import (
"encoding/base64" "encoding/base64"
@ -29,7 +29,8 @@ const (
// You may customize this to set a different epoch for your application. // You may customize this to set a different epoch for your application.
var Epoch int64 = 1288834974657 var Epoch int64 = 1288834974657
// A Node struct holds the basic information needed for a flake generator node // A Node struct holds the basic information needed for a snowflake generator
// node
type Node struct { type Node struct {
sync.Mutex sync.Mutex
time int64 time int64
@ -41,7 +42,8 @@ type Node struct {
// attach methods onto the ID. // attach methods onto the ID.
type ID int64 type ID int64
// NewNode returns a new Flake node that can be used to generate flake IDs // NewNode returns a new snowflake node that can be used to generate snowflake
// IDs
func NewNode(node int64) (*Node, error) { func NewNode(node int64) (*Node, error) {
if node < 0 || node > nodeMax { if node < 0 || node > nodeMax {