为了制作半随机的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)转换为类型[]符文
我该如何解决?
答案 0 :(得分:4)
无需将UUID
转换为[]rune
。 UUID
类型以二进制表示形式存储为[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)