go lang replace character in value

huangapple go评论118阅读模式
英文:

go lang replace character in value

问题

我正在使用下面的脚本片段,"var1"的值返回7d470821-a66a-5d57-b54f-2784ca96c591,现在,我想要移除"var1"中的"-",使其变为7d470821a66a5d57b54f2784ca96c591。我正在尝试以下脚本:

  1. package main
  2. import (
  3. "fmt"
  4. "strings"
  5. "github.com/google/uuid"
  6. )
  7. var namespace = uuid.NameSpaceURL
  8. var value = "abc" + "hello world" + "bow"
  9. var urls1 = []byte(value)
  10. func main() {
  11. fmt.Println("Generating UUIDs\n----------------")
  12. generate()
  13. }
  14. func generate() {
  15. //u, _ := uuid.NewUUID()
  16. //fmt.Println("UUID version 1:", u)
  17. var1 := uuid.NewSHA1(namespace, urls1)
  18. fmt.Println(var1)
  19. var2 := strings.Replace(var1.String(), "-", "", -1)
  20. fmt.Println(var2)
  21. }

但是我得到了以下错误,请帮我纠正错误:

  1. ./test-uuid1.go:23:29: cannot use var1 (variable of type uuid.UUID) as string value in argument to strings.Replace
英文:

I am using this below piece of the script, the value of "var1" returns 7d470821-a66a-5d57-b54f-2784ca96c591, now, value that is assigned to "var1", i want to remove "-" so that it becomes 7d470821a66a5d57b54f2784ca96c591. I am trying below script

  1. package main
  2. import (
  3. "fmt"
  4. "strings"
  5. "github.com/google/uuid"
  6. )
  7. var namespace = uuid.NameSpaceURL
  8. var value = "abc" + "hello world" + "bow"
  9. var urls1 = []byte(value)
  10. func main() {
  11. fmt.Println("Generating UUIDs\n----------------")
  12. generate()
  13. }
  14. func generate() {
  15. //u, _ := uuid.NewUUID()
  16. //fmt.Println("UUID version 1:", u)
  17. var1 := uuid.NewSHA1(namespace, urls1)
  18. fmt.Println(var1 )
  19. var2 = strings.Replace(var1, "-","",0)
  20. fmt.Println(var2)
  21. }

and i am getting, please help me to correct what i am wrong.

  1. ./test-uuid1.go:23:29: cannot use var1 (variable of type uuid.UUID) as string value in argument to strings.Replace

答案1

得分: 4

strings.Replace() 函数期望一个 string 类型的参数,而 uuid.NewSHA1() 返回一个 uuid.UUID 类型的值。

调用它的 UUID.String() 方法可以获取一个 string 类型的表示。

还要注意,将 0 传递给 strings.Replace() 将执行 0 次替换,因此不会有任何变化。这并不太有用。传递 -1 表示您想要替换所有出现的 -,或者更好的方法是使用 strings.ReplaceAll()

  1. var2 := strings.ReplaceAll(var1.String(), "-", "")

(注意 var2 不存在,所以必须使用 := 短变量声明 而不是简单的 赋值。)

这将输出以下结果(在 Go Playground 上尝试):

  1. 生成 UUID
  2. ----------------
  3. 7d470821-a66a-5d57-b54f-2784ca96c591
  4. 7d470821a66a5d57b54f2784ca96c591
英文:

strings.Replace() expects a string, and uuid.NewSHA1() returns a value of type uuid.UUID.

Call its UUID.String() method to obtain a string representation.

Also note that passing 0 to strings.Replace() will perform 0 replaces, so nothing will be changed. Not too useful. Pass -1 to indicate that you want to replace all occurrences of -, or even better, use strings.ReplaceAll():

  1. var2 := strings.ReplaceAll(var1.String(), "-", "")

(Note var2 doesn't exist, so you must use := short variable declaration instead of simple assignment.)

This will output (try it on the Go Playground):

  1. Generating UUIDs
  2. ----------------
  3. 7d470821-a66a-5d57-b54f-2784ca96c591
  4. 7d470821a66a5d57b54f2784ca96c591

答案2

得分: 0

icza的答案解决方案是正确的,已被接受,并且目前有五个赞同票。部分代码如下:

  1. var1 := uuid.NewSHA1(namespace, urls1)
  2. var2 := strings.ReplaceAll(var1.String(), "-", "")

然而,如果你将其作为Go面试问题,你可能更喜欢以下方式:

  1. func UUID5Hex(space uuid.UUID, data []byte) string {
  2. uuid := uuid.NewSHA1(space, data)
  3. return hex.EncodeToString(uuid[:])
  4. }
  5. uuid := UUID5Hex(namespace, urls1)

这里是一个示例代码。

面试官可能希望你应用奥卡姆剃刀原理。将UUID格式化为带有连字符的十六进制字符串,然后再移除连字符并不是最简洁的方法。

以下是一些Go基准测试结果:

  1. BenchmarkUUID5Hex-12 3371100 337.4 ns/op 216 B/op 5 allocs/op
  2. BenchmarkUUIDIcza-12 2845947 444.5 ns/op 232 B/op 5 allocs/op

希望对你有帮助!

英文:

icza's answer and solution are correct, it has been accepted, and currently has five upvotes. In part,

  1. var1 := uuid.NewSHA1(namespace, urls1)
  2. var2 := strings.ReplaceAll(var1.String(), "-", "")

However, if you are given this as a Go interview question, you may prefer,

  1. func UUID5Hex(space uuid.UUID, data []byte) string {
  2. uuid := uuid.NewSHA1(space, data)
  3. return hex.EncodeToString(uuid[:])
  4. }
  5. uuid := UUID5Hex(namespace, urls1))

https://go.dev/play/p/GJwKZKDTSvp

  1. abchello worldbow
  2. 7d470821a66a5d57b54f2784ca96c591

An interviewer may expect you to apply Occam's razor. Formatting the UUID as a hexadecimal string with hyphens and then removing the hyphens is not parsimonious.

Some Go benchmark results:

  1. BenchmarkUUID5Hex-12 3371100 337.4 ns/op 216 B/op 5 allocs/op
  2. BenchmarkUUIDIcza-12 2845947 444.5 ns/op 232 B/op 5 allocs/op

huangapple
  • 本文由 发表于 2023年2月20日 18:45:52
  • 转载请务必保留本文链接:https://go.coder-hub.com/75508243.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定