赞
踩
UUID简介
通用唯一识别码(英语:Universally Unique Identifier,简称UUID)是一种软件建构的标准,亦为自由软件基金会组织在分散式计算环境领域的一部份。
UUID的目的,是让分散式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。如此一来,每个人都可以创建不与其它人冲突的UUID。在这样的情况下,就不需考虑数据库创建时的名称重复问题。目前最广泛应用的UUID,是微软公司的全局唯一标识符(GUID),而其他重要的应用,则有Linux ext2/ext3文件系统、LUKS加密分区、GNOME、KDE、Mac OS X等等。
目前,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()
- }
功能:
代码
- 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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。