内容简介: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》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 用 RNN 训练语言模型生成文本
- 使用 Go 语言生成伪随机数
- 使用Go语言 生成iOS SDK
- 一文了解自然语言生成演变史!
- [预训练语言模型专题] BART & MASS 自然语言生成任务上的进步
- R语言:data.table语句批量生成变量
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Effective STL中文版
[美] Scott Meyers / 潘爱民、陈铭、邹开红 / 电子工业出版社 / 2013-5 / 59.00元
《Effective STL中文版:50条有效使用STL的经验》是EffectiveC++的第3卷,被评为“值得所有C++程序员阅读的C++书籍之一”。《Effective STL中文版:50条有效使用STL的经验》详细讲述了使用STL的50条指导原则,并提供了透彻的分析和深刻的实例,实用性极强,是C++程序员必备的基础书籍。C++的标准模板库(STL)是革命性的,要用好STL并不容易。《Effe......一起来看看 《Effective STL中文版》 这本书的介绍吧!