go语言生成uuid
操作系统: CentOS 6.9_x64
go语言版本: 1.8.3
问题描述
golang没有提供生成uuid的接口,但开发中确实需要uuid。
这里把看到的代码记录下,也方便我以后查阅。
解决方案
示例代码如下:
package mainimport ("fmt""sync/atomic""time" )type UUID [16]bytevar timeBase = time.Date(1582, time.October, 15, 0, 0, 0, 0, time.UTC).Unix() var hardwareAddr []byte var clockSeq uint32func TimeUUID() UUID {return FromTime(time.Now()) }func FromTime(aTime time.Time) UUID {var u UUIDutcTime := 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 variantu[8] |= 0x80 // set to IETF variantreturn 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 mainimport ("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
欢迎补充
转载于:https://www.cnblogs.com/MikeZhang/p/golangUUID20170615.html
go语言生成uuid相关推荐
- Go语言生成GUID和UUID
1.安装 go get -u github.com/typa01/go-utils import ("github.com/typa01/go-utils" ) 使用,例:fiel ...
- java生成UUID的方法总结
转自:https://blog.csdn.net/xinghuo0007/article/details/72868799 java生成UUID的方法总结 前言: 我们开发的时候,数据库表总会有一个主 ...
- UUID/GUID介绍、生成规则及生成代码
UUID/GUID介绍.生成规则及生成代码 1. UUID介绍 1.1 介绍 1.2 UUID优势 1.3 UUID劣势 2. UUID版本 2.1 版本1 - 基于时间的UUID 2.1.1优点 2 ...
- UUID的使用及其原理
今天敲项目要用UUID,想起之前老师告诉UUID的使用,但没说具体的生成逻辑,于是我进行了百度 首先,UUID的使用: //生成随机的UUID String uuid = UUID.randomUUI ...
- Python 标准库之 uuid
1. uuid 介绍 UUID: 通用唯一标识符 ( Universally Unique Identifier ),对于所有的 UUID 它可以保证在空间和时间上的唯一性.它是通过 MAC 地址.时 ...
- Mysql生成UUID
mysql 里面可以用uuid()语句来生成一个UUID: select uuid(); 有横杠的UUID select replace(uuid(), '-', "); 去掉横杠的UUID
- 实测 Mysql UUID 性能(转)
网上普遍认为Mysql 使用 UUID 主键性能低下,甚至建议用 自增ID 作为主键并用 UUID作唯一索引的方案.但没有提供具体的数据证明使用 UUID 作为主键时性能究竟低下到何种程度.为此我专 ...
- Lua生成Guid(uuid)
全局唯一标识符(GUID,Globally Unique Identifier)也称作 UUID(Universally Unique IDentifier) .GUID是一种由算法生成的二进制长度为 ...
- 理解 : UDID、UUID、IDFA、IDFV
iOS获取设备唯一标识的各种方法?IDFA.IDFV.UDID分别是什么含义? iOS获取设备ID总结 IDFA解释 关于UUID的理解 : 英文名称是:Universally Unique Iden ...
最新文章
- bootstrap的使用
- NGUI的button的创建的问题(Button Script)
- python爬虫简单的添加代理进行访问
- OpenCV2:幼儿园篇 第四章 访问图像
- go 打印 %v %+v %#v 的区别
- 网易2019实习生招聘题目 被3整除
- 自定义notebook扩展插件_win10下jupyter notebook扩展插件安装失败
- glide 压缩图拍呢_Glide-图片的压缩
- 订阅号做微信登录php,Thinkphp5实现微信登录
- Android遥控器开发
- 《企业管理学》—战略管理与目标管理知识点总结
- PHP获取服务器图片并添加水印
- 敏捷管理 -- 质量和风险管理
- PostgreSQL实战之体系结构
- 蚂蚁电竞ANT27VQ电子竞技显示器重磅来袭
- 期货投资盈亏比怎么算(期货盈亏怎么算的)
- 【JavaWeb篇】快速上手Tomcat|实战项目详解
- oracle故障一例,Oracle 10g异机恢复后EM无法启动故障处理一例
- 纯java的方式实现自定义自动化部署java项目
- 周海汉:Alexa 深入研究
热门文章
- 死锁发生的条件和预防
- java怎么从大到小排序元祖_在java中对元组列表进行排序的有效方法
- 开启事物_用一支洁面慕斯,开启精致生活
- python最佳框架_Web开发的10款最佳Python框架
- python实现录音小程序 界面_微信小程序录音界面以及功能实现
- 计算机科学文学学士,波士顿大学计算机科学.pdf
- 固态和机械硬盘组raid_电脑是固态硬盘好还是机械硬盘
- 【kafka】kerberos client is being asked for a password not available to garner authentication informa
- 【ElasticSearch】 ElasticSearch 读取 流程
- 【ElasticSearch】ElasticSearch 节点 性能 健康 监控