为了制作半随机的子弹,我想使用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
我该如何解决?
在该程序包中(我只是看过源代码),UUID是的别名[16]byte,因此您无法将其协调为符文数组,而不是您想要的。
[16]byte
试试这个:
s := hex.EncodeToString(u1.Bytes()[:4])
这将为您提供8个十六进制数字。但是,这仍然是一种回旋处事方式。v4 UUID除某些位外都是随机的,因此,如果您不使用整个UUID,则只需生成4个随机字节即可。使用中的Read()函数math/rand(必须为种子)或crypto/rand(UUID库使用的函数)。
Read()
math/rand
crypto/rand
b := make([]byte, 4) rand.Read(b) // Doesn’t actually fail s := hex.EncodeToString(b)