一尘不染

如何在golang中切掉uuid?

go

为了制作半随机的子弹,我想使用uuid的前8个字符。所以我有

import (
    fmt
    "github.com/satori/go.uuid"
)

    u1 := uuid.NewV4()
    fmt.Println("u1 :", u1)

    runes := []rune(u1)
    slug := string(runes[0:7])

但是在编译时我得到这个错误:

无法将u1(类型为uuid.UUID)转换为类型[] rune

我该如何解决?


阅读 364

收藏
2020-07-02

共1个答案

一尘不染

在该程序包中(我只是看过源代码),UUID是的别名[16]byte,因此您无法将其协调为符文数组,而不是您想要的。

试试这个:

s := hex.EncodeToString(u1.Bytes()[:4])

这将为您提供8个十六进制数字。但是,这仍然是一种回旋处事方式。v4
UUID除某些位外都是随机的,因此,如果您不使用整个UUID,则只需生成4个随机字节即可。使用中的Read()函数math/rand(必须为种子)或crypto/rand(UUID库使用的函数)。

b := make([]byte, 4)
rand.Read(b) // Doesn’t actually fail
s := hex.EncodeToString(b)
2020-07-02