mirror of
https://github.com/chai2010/advanced-go-programming-book.git
synced 2025-05-24 12:32:21 +00:00
finished dist id
This commit is contained in:
parent
f21c424ab5
commit
a77de3ad07
@ -162,3 +162,62 @@ redis 127.0.0.1:6379> SADD base64_encoding_of_last16bits MzI0Mgo=
|
|||||||
redis 127.0.0.1:6379> SADD base64_encoding_of_last16bits MzI0Mgo=
|
redis 127.0.0.1:6379> SADD base64_encoding_of_last16bits MzI0Mgo=
|
||||||
(integer) 0
|
(integer) 0
|
||||||
```
|
```
|
||||||
|
|
||||||
|
使用起来也比较简单,有一些逻辑简单的函数就略去实现了:
|
||||||
|
|
||||||
|
```go
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/sony/sonyflake"
|
||||||
|
)
|
||||||
|
|
||||||
|
func getMachineID() (uint16, error) {
|
||||||
|
var machineID uint16
|
||||||
|
var err error
|
||||||
|
machineID = readMachineIDFromLocalFile()
|
||||||
|
if machineID == 0 {
|
||||||
|
machineID, err = generateMachineID()
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return machineID, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func checkMachineID(machineID uint16) bool {
|
||||||
|
saddResult, err := saddMachineIDToRedisSet()
|
||||||
|
if err != nil || saddResult == 0 {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
err := saveMachineIDToLocalFile(machineID)
|
||||||
|
if err != nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
t, _ := time.Parse("2006-01-02", "2018-01-01")
|
||||||
|
settings := sonyflake.Settings{
|
||||||
|
StartTime: t,
|
||||||
|
MachineID: getMachineID,
|
||||||
|
}
|
||||||
|
|
||||||
|
sf := sonyflake.NewSonyflake(settings)
|
||||||
|
id, err := sf.NextID()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println(id)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Loading…
x
Reference in New Issue
Block a user