go语言生成uuid

栏目: Go · 发布时间: 8年前

内容简介:go语言生成uuid

操作系统: CentOS 6.9_x64

go语言版本: 1.8.3

问题描述

golang没有提供生成uuid的接口,但开发中确实需要uuid。

这里把看到的代码记录下,也方便我以后查阅。

解决方案

示例代码如下:

package main

import (
    "fmt"
    "sync/atomic"
    "time"
)

type UUID [16]byte

var timeBase = time.Date(1582, time.October, 15, 0, 0, 0, 0, time.UTC).Unix()
var hardwareAddr []byte
var clockSeq uint32

func TimeUUID() UUID {
    return FromTime(time.Now())
}

func FromTime(aTime time.Time) UUID {
    var u UUID

    utcTime := aTime.In(time.UTC)
    t := uint64(utcTime.Unix()-timeBase)*10000000 + uint64(utcTime.Nanosecond()/100)
    u[0], u[1], u[2], u[3] = byte(t>>24), byte(t>>16), byte(t>>8), byte(t)
    u[4], u[5] = byte(t>>40), byte(t>>32)
    u[6], u[7] = byte(t>>56)&0x0F, byte(t>>48)

    clock := atomic.AddUint32(&clockSeq, 1)
    u[8] = byte(clock >> 8)
    u[9] = byte(clock)

    copy(u[10:], hardwareAddr)

    u[6] |= 0x10 // set version to 1 (time based uuid)
    u[8] &= 0x3F // clear variant
    u[8] |= 0x80 // set to IETF variant

    return u
}

func (u UUID) String() string {
    var offsets = [...]int{0, 2, 4, 6, 9, 11, 14, 16, 19, 21, 24, 26, 28, 30, 32, 34}
    const hexString = "0123456789abcdef"
    r := make([]byte, 36)
    for i, b := range u {
        r[offsets[i]] = hexString[b>>4]
        r[offsets[i]+1] = hexString[b&0xF]
    }
    r[8] = '-'
    r[13] = '-'
    r[18] = '-'
    r[23] = '-'
    return string(r)
}

func main() {
    out := TimeUUID()
    fmt.Printf("%s\n", out.String())
}

运行效果:

[root@local t2]# go run uuidTest.go
[root@local t2]#
3e42d638-5243-11e7-8001-000000000000

讨论

当然如果你只是想快速的得到uuid,而且使用的是 linux 系统,可以直接使用uuidgen命令来获取。

示例代码如下:

package main

import (
    "fmt"
    "log"
    "os/exec"
)

//run in linux
func main() {
    out, err := exec.Command("uuidgen").Output()
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("%s", out)
}

好,就这些了,希望对你有帮助。

本文github地址:

https://github.com/mike-zhang/mikeBlogEssays/blob/master/2017/ 20170615_go语言生成uuid.rst

欢迎补充


以上所述就是小编给大家介绍的《go语言生成uuid》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

计算机组成(第 6 版)

计算机组成(第 6 版)

Andrew S. Tanenbaum、Todd Austin / 刘卫东、宋佳兴 / 机械工业出版社 / 2014-8-19 / CNY 99.00

本书采用结构化方法来介绍计算机系统,书的内容完全建立在“计算机是由层次结构组成的,每层完成规定的功能”这一概念之上。作者对本版进行了彻底的更新,以反映当今最重要的计算机技术以及计算机组成和体系结构方面的最新进展。书中详细讨论了数字逻辑层、微体系结构层、指令系统层、操作系统层和汇编语言层,并涵盖了并行体系结构的内容,而且每一章结尾都配有丰富的习题。本书适合作为计算机专业本科生计算机组成与结构课程的教......一起来看看 《计算机组成(第 6 版)》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

SHA 加密
SHA 加密

SHA 加密工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具