操作系统: 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的更多相关文章

  1. 使用C#代码生成一个随机的UUID

    在日常开发中常见于生成主键的ID,比较规范好用,详细代码如下(写注释是个好习惯): using System;using System.Collections.Generic;using System ...

  2. JAVA UUID 生成

    UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的.通常平台会提供生成UUID的API.UUID按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址.纳秒级时间.芯 ...

  3. UUID库

    If you cannot afford to use Boost, then there is a very minimal library that I implemented which sim ...

  4. Solr4.0 如何配置使用UUID自动生成id值

    原文链接http://blog.csdn.net/keepthinking_/article/details/8501058#comments 最近学习了Lucene,随便也学习了Solr,Solr规 ...

  5. 解决svn uuid变更问题

    简介: 今天在snv根目录下重新定位上传的url,更改后出现如下错误 .可以看到,原来Repository创建者的uuid是前者,而现在我操作的是后者的uuid.因此,目前的操作办法是 使用相关命令更 ...

  6. python使用uuid库生成唯一id

    概述: UUID是128位的全局唯一标识符,通常由32字节的字符串表示. 它可以保证时间和空间的唯一性,也称为GUID,全称为: UUID -- Universally Unique IDentifi ...

  7. hibernate UUID问题

    前言:hibernate对于字符串类型主键支持UUID主键生成策略,(号称是世界上唯一的字符串) 运行环境:运行环境:hibernate5.2,mysql5.6 一,使用hibernate给Strin ...

  8. VC++ 产生GUID或UUID

    GUID 和 UUID 是一样的,表示全球唯一标识码. 下面是Windows系统中,产生GUID的一种方法(Windows API) char* GUID_Generator() { ] = {}; ...

  9. UUID

    首先我们要知道UUID是什么?有什么用?为什么要使用它? UUID是什么? UUID 的目的,是让分布式系统中的所有元素,都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定.如此一来,每个 ...

随机推荐

  1. weblogic 12C集群环境下的session复制

    做过weblogic集群环境的人应该都清楚,要想实现session同步,必须满足两个条件:第一,在weblogic.xml里面增加session同步相关的代码:第二,所有放入session的类都要序列 ...

  2. win7凭据管理、win7多用户远程登录、主机头设置、nuget.org无法访问

    前言  最近遇到的几个问题,然后处理在此对处理方式进行记录一下. 1.服务器共享文件夹,在本机进行访问登录时,每次登录或者每次开机进入都要进行登录的权限认证,这样很麻烦. 2.服务器难免会有多用户同时 ...

  3. hydra 安装和使用

    udo add-apt-repository ppa:pi-rho/security sudo apt-get update sudo apt-get install hydra hydra -l r ...

  4. 获得assets文件夹中文件内容

    /** * @param fileName * @return assets中文件的字符串 */ public String getFromAssets(Context context, String ...

  5. Reloading Java Classes 101: Objects, Classes and ClassLoaders Translation

    The original link: http://zeroturnaround.com/rebellabs/reloading-objects-classes-classloaders/ A Bir ...

  6. 洛谷P1972 [SDOI2009]HH的项链 题解

    [SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不 ...

  7. CentOS6.4下安装Chrome

    因为蛋疼的glibc问题,(我就纳闷了,为何CentOS支持的glibc的版本就那么低呢,害得我至今还没把genymotion安装上), Chrome浏览器一直没安装上,不过终于找到了解决方案,安装派 ...

  8. Http协议中Get和Post的浅谈

    起名困难户,每次写文章最愁的就是不知道该如何起个稍具内涵的名字,如果这篇文章我只是写写Get和Post的区别,我可以起个名字“Get和Post的那点事”,如果打算阐述一下Http协议原理性内容,那该叫 ...

  9. RxJava 操作符 on和doOn 线程切换 调度 Schedulers 线程池 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  10. js处理url的技巧和归纳

    var url = 'http://www.deikang.com/index.php?tel=15811296111&status=1&id=100'; var n = url.in ...