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



我正在尝试将原始字节字符串转换为uuid在我的程序中,如下所示:

Case1:

package main
import (
"fmt"
"strconv"
"github.com/google/uuid"
)
func main() {
s := `"220254021265235O~244326216"227c24502"`
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 main
import (
"fmt"
"strconv"
"github.com/google/uuid"
)
func main() {
s := `"235273'2103261@22226275o26532202211263"`
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 syntax
goroutine 1 [running]:
main.main()
/tmp/sandbox1756881518/prog.go:14 +0x149
Program exited.

上面的程序正在处理字符串"220254021265235O~244326216"227c24502",但无法将字符串"235273'2103261@22226275o26532202211263"转换为uuid。如何将这些字符串转换为uid ?

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

第一个

请替换这一行:

s := `"235273'2103261@22226275o26532202211263"`

与这个:

s := `"235273'2103261@22226275o26532202211263"`

所以有'而不是'。但是,如果需要以编程方式转换字符串,则使用第二种方法。

第二Import"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 := `"235273'2103261@22226275o26532202211263"`
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())
}

最新更新