操作系统: 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相关推荐

  1. Go语言生成GUID和UUID

    1.安装 go get -u github.com/typa01/go-utils import ("github.com/typa01/go-utils" ) 使用,例:fiel ...

  2. java生成UUID的方法总结

    转自:https://blog.csdn.net/xinghuo0007/article/details/72868799 java生成UUID的方法总结 前言: 我们开发的时候,数据库表总会有一个主 ...

  3. UUID/GUID介绍、生成规则及生成代码

    UUID/GUID介绍.生成规则及生成代码 1. UUID介绍 1.1 介绍 1.2 UUID优势 1.3 UUID劣势 2. UUID版本 2.1 版本1 - 基于时间的UUID 2.1.1优点 2 ...

  4. UUID的使用及其原理

    今天敲项目要用UUID,想起之前老师告诉UUID的使用,但没说具体的生成逻辑,于是我进行了百度 首先,UUID的使用: //生成随机的UUID String uuid = UUID.randomUUI ...

  5. Python 标准库之 uuid

    1. uuid 介绍 UUID: 通用唯一标识符 ( Universally Unique Identifier ),对于所有的 UUID 它可以保证在空间和时间上的唯一性.它是通过 MAC 地址.时 ...

  6. Mysql生成UUID

    mysql 里面可以用uuid()语句来生成一个UUID: select uuid(); 有横杠的UUID select replace(uuid(), '-', "); 去掉横杠的UUID

  7. 实测 Mysql UUID 性能(转)

    网上普遍认为Mysql  使用 UUID 主键性能低下,甚至建议用 自增ID 作为主键并用 UUID作唯一索引的方案.但没有提供具体的数据证明使用 UUID 作为主键时性能究竟低下到何种程度.为此我专 ...

  8. Lua生成Guid(uuid)

    全局唯一标识符(GUID,Globally Unique Identifier)也称作 UUID(Universally Unique IDentifier) .GUID是一种由算法生成的二进制长度为 ...

  9. 理解 : UDID、UUID、IDFA、IDFV

    iOS获取设备唯一标识的各种方法?IDFA.IDFV.UDID分别是什么含义? iOS获取设备ID总结 IDFA解释 关于UUID的理解 : 英文名称是:Universally Unique Iden ...

最新文章

  1. bootstrap的使用
  2. NGUI的button的创建的问题(Button Script)
  3. python爬虫简单的添加代理进行访问
  4. OpenCV2:幼儿园篇 第四章 访问图像
  5. go 打印 %v %+v %#v 的区别
  6. 网易2019实习生招聘题目 被3整除
  7. 自定义notebook扩展插件_win10下jupyter notebook扩展插件安装失败
  8. glide 压缩图拍呢_Glide-图片的压缩
  9. 订阅号做微信登录php,Thinkphp5实现微信登录
  10. Android遥控器开发
  11. 《企业管理学》—战略管理与目标管理知识点总结
  12. PHP获取服务器图片并添加水印
  13. 敏捷管理 -- 质量和风险管理
  14. PostgreSQL实战之体系结构
  15. 蚂蚁电竞ANT27VQ电子竞技显示器重磅来袭
  16. 期货投资盈亏比怎么算(期货盈亏怎么算的)
  17. 【JavaWeb篇】快速上手Tomcat|实战项目详解
  18. oracle故障一例,Oracle 10g异机恢复后EM无法启动故障处理一例
  19. 纯java的方式实现自定义自动化部署java项目
  20. 周海汉:Alexa 深入研究

热门文章

  1. 死锁发生的条件和预防
  2. java怎么从大到小排序元祖_在java中对元组列表进行排序的有效方法
  3. 开启事物_用一支洁面慕斯,开启精致生活
  4. python最佳框架_Web开发的10款最佳Python框架
  5. python实现录音小程序 界面_微信小程序录音界面以及功能实现
  6. 计算机科学文学学士,波士顿大学计算机科学.pdf
  7. 固态和机械硬盘组raid_电脑是固态硬盘好还是机械硬盘
  8. 【kafka】kerberos client is being asked for a password not available to garner authentication informa
  9. 【ElasticSearch】 ElasticSearch 读取 流程
  10. 【ElasticSearch】ElasticSearch 节点 性能 健康 监控