【go】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
【参考链接】
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具