我正在尝试将原始字节字符串转换为uuid在我的程序中,如下所示:
Case1:
package main
import (
"fmt"
"strconv"
"github.com/google/uuid"
)
func main() {
s := `"220254 021265235O~244326216"227c245 02"`
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' 21 03261@ 22226275o265322 02211263"`
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.
上面的程序正在处理字符串"220254 021265235O~244326216"227c245 02"
,但无法将字符串"235273' 21 03261@ 22226275o265322 02211263"
转换为uuid。如何将这些字符串转换为uid ?
'
故障。当使用反斜杠时,所有的反斜杠都是字面上的反斜杠,而不是转义序列,因此您将原始反斜杠,后跟单引号
'
传递给strconv.Unquote
。它会导致语法无效。这里有两种解决方法:
第一个
请替换这一行:
s := `"235273' 21 03261@ 22226275o265322 02211263"`
与这个:
s := `"235273' 21 03261@ 22226275o265322 02211263"`
所以有'
而不是'
。但是,如果需要以编程方式转换字符串,则使用第二种方法。
第二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' 21 03261@ 22226275o265322 02211263"`
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())
}