如何在golang中切割uuid?

时间:2017-12-06 13:57:35

标签: go uuid

为了制作半随机的slu ,,我想使用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)转换为类型[]符文

我该如何解决?

2 个答案:

答案 0 :(得分:4)

无需将UUID转换为[]runeUUID类型以二进制表示形式存储为[16]byte。有一个UUID.String()方法可用于转换为字符串,然后对其进行切片。

 slug := u1.String()[:7]

答案 1 :(得分:3)

在那个包中(我只是查看了源代码),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)