uuid简介

通用唯一识别码(英语:universally unique identifier,简称uuid)是一种软件建构的标准,亦为自由软件基金会组织在分散式计算环境领域的一部份。
uuid的目的,是让分散式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。
如此一来,每个人都可以创建不与其它人冲突的uuid。
在这样的情况下,就不需考虑数据库创建时的名称重复问题。目前最广泛应用的uuid,是微软公司的全局唯一标识符(guid),而其他重要的应用,则有linux ext2/ext3文件系统、luks加密分区、gnome、kde、mac os x等等。


目前,golang中并没有uuid的标准库,所以需要借助第三方库。
下面介绍几个用的比较多的uuid第三方库

github.com/google/uuid

谷歌出品的go语言uuid库github.com/google/uuid

生成纯数字类型uuid

package main

import (
	"fmt"

	"github.com/google/uuid"
)

func main() {
	u1 := uuid.New()
	u2, _ := uuid.NewRandom()
	fmt.Println(u1.ID())
	fmt.Println(u2.ID())
}

/* -- 输出 --
3507369127
1284741309
*/

生成字符串类型uuid

package main

import (
	"fmt"

	"github.com/google/uuid"
)

func main() {
	u1 := uuid.New()
	u2, _ := uuid.NewRandom()
	fmt.Println(u1.String())
	fmt.Println(u2.String())
}

/* -- 输出 --
494e09ff-29ec-426a-a3a1-362078085557
8451e91a-4251-4cb8-ac82-6bd1fb684a61
*/

github.com/satori/go.uuid

GitHub上还有一个uuid库github.com/satori/go.uuid,但是只能生成字符串类型的uuid。

package main

import (
	"fmt"

	"github.com/satori/go.uuid"
)

func main() {
	u1 := uuid.NewV4()
	fmt.Println(u1.String())
}

/* -- 输出 --
36a657b9-f529-4037-b6f7-9a1cb8060996
*/

github.com/rs/xid

package main

import (
	"fmt"

	"github.com/rs/xid"
)



func main() {
    id := xid.New()
    fmt.Printf("github.com/rs/xid:           %s\n", id.String())
}
//github.com/rs/xid:           cdoup9qma9lh444rnjsg

github.com/kjk/betterguid

package main

import (
	"fmt"

	"github.com/segmentio/ksuid"
)

func main() {
	id := ksuid.New()
	fmt.Printf("github.com/segmentio/ksuid:  %s\n", id.String())
}
//github.com/segmentio/ksuid:  2HWp8gYl9YD2e1mWN4wt3M0xFW0

github.com/kjk/betterguid

package main

import (
	"fmt"
	
	"github.com/kjk/betterguid"
)

func main() {
	id := betterguid.New()
	fmt.Printf("github.com/kjk/betterguid:   %s\n", id)
}
//github.com/kjk/betterguid:   -NGp05ol0KJTby4X5oda

github.com/oklog/ulid

package main

import (
	"fmt"
	"math/rand"
	"time"

	"github.com/oklog/ulid"
)


func main() {
	t := time.Now().UTC()
	entropy := rand.New(rand.NewSource(t.UnixNano()))
	id := ulid.MustNew(ulid.Timestamp(t), entropy)
	fmt.Printf("github.com/oklog/ulid:       %s\n", id.String())
}
//github.com/oklog/ulid:       01GHTG8V9HC9NJPFGGZB9RV4M9

github.com/sony/sonyflake

package main

import (
	"fmt"

	"github.com/sony/sonyflake"
)


func main() {
	flake := sonyflake.NewSonyflake(sonyflake.Settings{})
	id, err := flake.NextID()
	if err != nil {
		fmt.Printf("flake.NextID() failed with %s\n", err)
	}
	fmt.Printf("github.com/sony/sonyflake:   %x\n", id)
}
//github.com/sony/sonyflake:   6070cf552000bc8

github.com/chilts/sid

package main

import (
	"fmt"

	"github.com/chilts/sid"
)



func genSid() {
	id := sid.Id()
	fmt.Printf("github.com/chilts/sid:       %s\n", id)
}
//github.com/chilts/sid:       1668410535227050000-0834787600488830456

原文地址:http://www.cnblogs.com/hexug/p/16891643.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性