go语言生成uuid
操作系统: CentOS 6.9_x64
go语言版本: 1.8.3
问题描述
golang没有提供生成uuid的接口,但开发中确实需要uuid。
这里把看到的代码记录下,也方便我以后查阅。
解决方案
示例代码如下:
package main import (
"fmt"
"sync/atomic"
"time"
) type UUID []byte var timeBase = time.Date(, time.October, , , , , , 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)* + uint64(utcTime.Nanosecond()/)
u[], u[], u[], u[] = byte(t>>), byte(t>>), byte(t>>), byte(t)
u[], u[] = byte(t>>), byte(t>>)
u[], u[] = byte(t>>)&0x0F, byte(t>>) clock := atomic.AddUint32(&clockSeq, )
u[] = byte(clock >> )
u[] = byte(clock) copy(u[:], hardwareAddr) u[] |= 0x10 // set version to 1 (time based uuid)
u[] &= 0x3F // clear variant
u[] |= 0x80 // set to IETF variant return u
} func (u UUID) String() string {
var offsets = [...]int{, , , , , , , , , , , , , , , }
const hexString = "0123456789abcdef"
r := make([]byte, )
for i, b := range u {
r[offsets[i]] = hexString[b>>]
r[offsets[i]+] = hexString[b&0xF]
}
r[] = '-'
r[] = '-'
r[] = '-'
r[] = '-'
return string(r)
} func main() {
out := TimeUUID()
fmt.Printf("%s\n", out.String())
}
运行效果:
[root@local t2]# go run uuidTest.go
[root@local t2]#
3e42d638--11e7--
讨论
当然如果你只是想快速的得到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的更多相关文章
- 使用C#代码生成一个随机的UUID
在日常开发中常见于生成主键的ID,比较规范好用,详细代码如下(写注释是个好习惯): using System;using System.Collections.Generic;using System ...
- JAVA UUID 生成
UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的.通常平台会提供生成UUID的API.UUID按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址.纳秒级时间.芯 ...
- UUID库
If you cannot afford to use Boost, then there is a very minimal library that I implemented which sim ...
- Solr4.0 如何配置使用UUID自动生成id值
原文链接http://blog.csdn.net/keepthinking_/article/details/8501058#comments 最近学习了Lucene,随便也学习了Solr,Solr规 ...
- 解决svn uuid变更问题
简介: 今天在snv根目录下重新定位上传的url,更改后出现如下错误 .可以看到,原来Repository创建者的uuid是前者,而现在我操作的是后者的uuid.因此,目前的操作办法是 使用相关命令更 ...
- python使用uuid库生成唯一id
概述: UUID是128位的全局唯一标识符,通常由32字节的字符串表示. 它可以保证时间和空间的唯一性,也称为GUID,全称为: UUID -- Universally Unique IDentifi ...
- hibernate UUID问题
前言:hibernate对于字符串类型主键支持UUID主键生成策略,(号称是世界上唯一的字符串) 运行环境:运行环境:hibernate5.2,mysql5.6 一,使用hibernate给Strin ...
- VC++ 产生GUID或UUID
GUID 和 UUID 是一样的,表示全球唯一标识码. 下面是Windows系统中,产生GUID的一种方法(Windows API) char* GUID_Generator() { ] = {}; ...
- UUID
首先我们要知道UUID是什么?有什么用?为什么要使用它? UUID是什么? UUID 的目的,是让分布式系统中的所有元素,都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定.如此一来,每个 ...
随机推荐
- java解压缩zip和rar的工具类
package decompress; import java.io.File; import java.io.FileOutputStream; import org.apache.tools.an ...
- Smali基本语法
.field private isFlag:z 定义变量 .method 方法 .parameter 方法参数 .prologue 方法开始 .line 12 此方法位于第12行 invoke-sup ...
- ExtJS 4.2 教程-05:客户端代理(proxy)
转载自起飞网,原文地址:http://www.qeefee.com/extjs-course-5-client-proxy ExtJS 4.2 教程-01:Hello ExtJS ExtJS 4.2 ...
- Material Designer的低版本兼容实现(一)—— 简介 & 目录
很长一段时间没写东西了,其实是因为最近在研究Material Designer这个东西,熬夜熬的身体也不是很好了.所以就偷懒没写东西,这回开的这个系列文章是讲如何将Material Designer在 ...
- Gallery和自定义Adapter配合使用,实现图片预览
Gallery是一个可以拖动的列表,正中对应的是选中的东西.他和spinner有共同的父类:AbsSpinner 属性: android:animationDuration="1000&qu ...
- SVG Path路径使用(一)
一.<path> 标签 <path> 标签用来定义路径. 下面的命令可用于路径数据: M = moveto L = lineto H = horizontal lineto V ...
- 【转】memcached分布式部署
FROM : http://www.tuicool.com/articles/777nE3j memcache和memcached两者使用起来几乎一模一样. $mem = new Memcache; ...
- Java NIO Test Case
package org.zwl.test.nio; import java.io.IOException; import java.net.InetSocketAddress; import java ...
- Oracle简单的备份和恢复-导出和导入(2)
ylbtech-Oracle:Oracle简单的备份和恢复-导出和导入(2) 简单的备份和恢复-导出和导入(2) 1. 用户导入导出文件中的一张表(emp)返回顶部 0.1, 我们在sql plus中 ...
- Qt解决:Qobject::connect queue arguments of type ‘xxxx’,Make sure ‘xxxx’ is registered using qRegister
解决方法:在调用connect之前,通过 qRegisterMetaType() 注册你connect函数里对象的类型代码如下: typedef QString CustomString;//你自己定 ...