This commit is contained in:
2025-10-10 07:13:36 -07:00
commit 95c66c0a8a
1023 changed files with 78353 additions and 0 deletions
+64
View File
@@ -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")
}
+59
View File
@@ -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)
}
})
}
}