init
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
package snowflake
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"net"
|
||||
|
||||
sf "github.com/GUAIK-ORG/go-snowflake/snowflake"
|
||||
)
|
||||
|
||||
var snowflake *sf.Snowflake
|
||||
|
||||
func init() {
|
||||
localIp3, err := GetLocalIp()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
dataCenterID := int64(localIp3 >> 4)
|
||||
workerID := int64(localIp3 & 0xf)
|
||||
snowflake, err = sf.NewSnowflake(dataCenterID, workerID)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
func GetID() int64 {
|
||||
return snowflake.NextVal()
|
||||
}
|
||||
|
||||
func GetTimestamp(id int64) int64 {
|
||||
return sf.GetTimestamp(id)
|
||||
}
|
||||
|
||||
func GetGenTimestamp(id int64) int64 {
|
||||
return sf.GetGenTimestamp(id)
|
||||
}
|
||||
|
||||
func GetLocalIp() (byte, error) {
|
||||
ifaces, err := net.Interfaces()
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
for _, i := range ifaces {
|
||||
addrs, errRet := i.Addrs()
|
||||
if errRet != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
for _, addr := range addrs {
|
||||
var ip net.IP
|
||||
switch v := addr.(type) {
|
||||
case *net.IPNet:
|
||||
if v.IP.IsGlobalUnicast() {
|
||||
ip = v.IP.To4()
|
||||
if ip != nil {
|
||||
return ip[3], nil
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0, errors.New("no validate ifaces to IPV4")
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
package snowflake
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestGetLocalIp(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
// want byte
|
||||
wantErr bool
|
||||
wantFunc func(byte) (bool, string)
|
||||
}{
|
||||
// TODO: Add test cases.
|
||||
{
|
||||
name: "",
|
||||
wantErr: false,
|
||||
wantFunc: func(got byte) (bool, string) { return got > 0, "got > 0" },
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
got, err := GetLocalIp()
|
||||
if (err != nil) != tt.wantErr {
|
||||
t.Errorf("GetLocalIp() error = %v, wantErr %v", err, tt.wantErr)
|
||||
return
|
||||
}
|
||||
if r, s := tt.wantFunc(got); !r {
|
||||
t.Errorf("GetLocalIp() = %v, want %v", got, s)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetID(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
// want int64
|
||||
wantErr bool
|
||||
wantFunc func(int64) (bool, string)
|
||||
}{
|
||||
// TODO: Add test cases.
|
||||
{
|
||||
name: "",
|
||||
wantErr: false,
|
||||
wantFunc: func(got int64) (bool, string) {
|
||||
return got > 0, "got > 0"
|
||||
},
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
got := GetID()
|
||||
if r, s := tt.wantFunc(got); !r {
|
||||
t.Errorf("GetID() = %v, want %v", got, s)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user