为了账号安全,请及时绑定邮箱和手机立即绑定

Go - 将原始字节字符串转换为 uuid

Go - 将原始字节字符串转换为 uuid

Go
红颜莎娜 2022-12-19 21:04:54
我试图在我的程序中将原始字节字符串转换为 UUID,如下所示:情况1:package mainimport (    "fmt"    "strconv"    "github.com/google/uuid")func main() {    s := `"\220\254\0021\265\235O~\244\326\216\"\227c\245\002"`    s2, err := strconv.Unquote(s)    if err != nil {        panic(err)    }    by := []byte(s2)    u, err := uuid.FromBytes(by)    if err != nil {        panic(err)    }    fmt.Println(u.String())}输出:90ac0231-b59d-4f7e-a4d6-8e229763a502案例2:package mainimport (    "fmt"    "strconv"    "github.com/google/uuid")func main() {    s := `"\235\273\'\021\003\261@\022\226\275o\265\322\002\211\263"`    s2, err := strconv.Unquote(s)    if err != nil {        panic(err)    }    by := []byte(s2)    u, err := uuid.FromBytes(by)    if err != nil {        panic(err)    }    fmt.Println(u.String())}输出:panic: invalid syntaxgoroutine 1 [running]:main.main()    /tmp/sandbox1756881518/prog.go:14 +0x149Program exited.上面的程序正在处理字符串"\220\254\0021\265\235O~\244\326\216\"\227c\245\002",但无法将字符串转换"\235\273\'\021\003\261@\022\226\275o\265\322\002\211\263"为 uuid。如何将这些字符串转换为 UUID?
查看完整描述

1 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

如果失败是因为\'. 使用反引号时,所有反斜杠实际上都是反斜杠而不是转义序列,因此您将原始反斜杠\,后跟单引号'传递给strconv.Unquote. 它会导致无效的语法。这里有两种解决方法:


第一的

只需替换这一行:


s := `"\235\273\'\021\003\261@\022\226\275o\265\322\002\211\263"`

有了这个:


s := `"\235\273'\021\003\261@\022\226\275o\265\322\002\211\263"`

所以'没有\'。但如果您需要以编程方式转换字符串,请使用第二种方法。


第二

导入"strings":


import (

    "fmt"

    "strconv"

    "strings"

    "github.com/google/uuid"

)

并替换\'为':


s = strings.ReplaceAll(s, `\'`, `'`)

所以现在完整的代码看起来像这样:


package main


import (

    "fmt"

    "strconv"

    "strings"

    "github.com/google/uuid"

)


func main() {

    s := `"\235\273\'\021\003\261@\022\226\275o\265\322\002\211\263"`

    s = strings.ReplaceAll(s, `\'`, `'`)

    s2, err := strconv.Unquote(s)

    if err != nil {

        fmt.Println(err)

    }


    by := []byte(s2)

    u, err := uuid.FromBytes(by)

    if err != nil {

        fmt.Println(err)

    }

    fmt.Println(u.String())

}


查看完整回答
反对 回复 2022-12-19
  • 1 回答
  • 0 关注
  • 252 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信