美文网首页
Golang雪花算法生成分布式唯一ID

Golang雪花算法生成分布式唯一ID

作者: FredricZhu | 来源:发表于2020-11-06 14:08 被阅读0次

    工程结构


    图片.png

    main.go

    package main
    
    import (
        "fmt"
        "log"
    
        "github.com/zhuge20100104/laonanhai/snowflakedemo/sfnake"
    )
    
    func main() {
        sID, err := sfnake.SFlake.GetID()
        if err != nil {
            log.Fatalf("snow flake get id err: %v\n", err)
        }
        fmt.Printf("Get sid from snow flake: %v\n", sID)
    }
    

    sfnake.go

    package sfnake
    
    import (
        "github.com/sony/sonyflake"
    )
    
    var (
        SFlake *SnowFlake
    )
    
    // SnowFlake SnowFlake算法结构体
    type SnowFlake struct {
        sFlake *sonyflake.Sonyflake
    }
    
    func init() {
        SFlake = NewSnowFlake()
    }
    
    // 模拟获取本机的机器ID
    func getMachineID() (mID uint16, err error) {
        mID = 10
        return
    }
    
    func NewSnowFlake() *SnowFlake {
        st := sonyflake.Settings{}
        // machineID是个回调函数
        st.MachineID = getMachineID
        return &SnowFlake{
            sFlake: sonyflake.NewSonyflake(st),
        }
    }
    
    func (s *SnowFlake) GetID() (uint64, error) {
        return s.sFlake.NextID()
    }
    

    程序输出如下


    图片.png

    相关文章

      网友评论

          本文标题:Golang雪花算法生成分布式唯一ID

          本文链接:https://www.haomeiwen.com/subject/cljavktx.html