1、什么是uuid
uuid简介通用唯一识别码(英语:universally unique identifier,简称uuid)是一种软件建构的标准,亦为自由软件基金会组织在分散式计算环境领域的一部份。
uuid的目的,是让分散式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。如此一来,每个人都可以创建不与其它人冲突的uuid。在这样的情况下,就不需考虑数据库创建时的名称重复问题。目前最广泛应用的uuid,是微软公司的全局唯一标识符(guid),而其他重要的应用,则有linux ext2/ext3文件系统、luks加密分区、gnome、kde、mac os x等等。
2、go中现有的uuid第三方生成办法
目前,golang中的uuid还没有纳入标准库,我们使用github上的开源库:
go get -u github.com/satori/go.uuid
使用:
package main
import (
"fmt"
"github.com/satori/go.uuid"
)
func main() {
id := uuid.newv4()
ids := id.string()
}
3、自定义的 uuidgenerator实现
功能:
- uuidgenerator 可以生成全局唯一的字符串形式的id,id由两部分构成,一部分是用户指定的前缀,另一部分是数字,数字的最大值为 4294967295;
- uuidgenerator 可以生成全局唯一的无符号整形数字,数字范围 0- 4294967295
代码
package utils
import "fmt"
const (
maxuint32 = 4294967295
default_uuid_cnt_cache = 512
)
type uuidgenerator struct {
prefix string
idgen uint32
internalchan chan uint32
}
func newuuidgenerator(prefix string) *uuidgenerator {
gen := &uuidgenerator{
prefix: prefix,
idgen: 0,
internalchan: make(chan uint32, default_uuid_cnt_cache),
}
gen.startgen()
return gen
}
//开启 goroutine, 把生成的数字形式的uuid放入缓冲管道
func (this *uuidgenerator) startgen() {
go func() {
for {
if this.idgen == maxuint32 {
this.idgen = 1
} else {
this.idgen += 1
}
this.internalchan <- this.idgen
}
}()
}
//获取带前缀的字符串形式的uuid
func (this *uuidgenerator) get() string {
idgen := <-this.internalchan
return fmt.sprintf("%s%d", this.prefix, idgen)
}
//获取uint32形式的uuid
func (this *uuidgenerator) getuint32() uint32 {
return <-this.internalchan
}
测试用例:
package utils
import (
"testing"
"fmt"
)
func testuuidgenerator(t *testing.t) {
//新建uuidgennerator
uuidfactory := newuuidgenerator("idtest")
//获取uuid
for i:= 0; i < 50; i++{
fmt.println(uuidfactory.get())
}
//获取uint32 形式的uuid
for i := 0; i < 50; i++{
fmt.println(uuidfactory.getuint32())
}
}
结果
idtest1
idtest2
idtest3
idtest4
idtest5
6
7
8
9
10
pass
到此这篇关于golang中生成uuid唯一标识的方法示例的文章就介绍到这了,更多相关golang生成uuid唯一标识内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论