gpt4 book ai didi

regex - Goa 包的类型断言 (uuid.UUID)

转载 作者:数据小太阳 更新时间:2023-10-29 03:15:06 26 4
gpt4 key购买 nike

我正在测试 Goa对于一个 API。我想使用 uuid 作为 ID 数据类型。我在 controller.go 中修改了以下函数:

// Show runs the show action.
func (c *PersonnelController) Show(ctx *app.ShowPersonnelContext) error {
// v4 UUID validate regex
var validate = `^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[8|9|aA|bB][a-f0-9]{3}-[a-f0-9]{12}$`
uuidValidator := regexp.MustCompile(validate)
if !uuidValidator.Match(ctx.MemberID) {
return ctx.NotFound()
}
// Build the resource using the generated data structure
personnel := app.GoaCrewWorkforce{
MemberID: ctx.MemberID,
FirstName: fmt.Sprintf("First-Name #%s", ctx.MemberID),
LastName: fmt.Sprintf("Last-Name #%s", ctx.MemberID),
}

我想做的是使用正则表达式在我的 Controller 中验证一个 v4 uuid,这样如果它不验证它就不会轮询服务器。据我了解,uuid 是 [16] 字节 slice 。正则表达式有一个 Match []byte 函数。但是我似乎无法理解为什么会出现以下错误:

cannot use ctx.MemberID (type uuid.UUID) as type []byte in argument to uuidValidator.Match

如何输入 assert ctx.MemberID?我认为在这种情况下不可能进行强制转换?任何指导表示赞赏。

最佳答案

如果你想验证uuid,你可以直接检查位。没有太多要验证的,因为 16 个字节中的大部分是随机的,但是您可以检查版本号的第 6 个字节的前 4 位,或者变体的第 8 个字节的前 3 位。

// enforce only V4 uuids
if ctx.MemberID[6] >> 4 != 4 {
log.Fatal("not a V4 UUID")
}

// enforce only RFC4122 type UUIDS
if (ctx.MemberID[8]&0xc0)|0x80 != 0x80 {
log.Fatal("not an RFC4122 UUID")
}

关于regex - Goa 包的类型断言 (uuid.UUID),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38107565/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com