英文:
go lang replace character in value
问题
我正在使用下面的脚本片段,"var1"的值返回7d470821-a66a-5d57-b54f-2784ca96c591
,现在,我想要移除"var1"中的"-",使其变为7d470821a66a5d57b54f2784ca96c591
。我正在尝试以下脚本:
package main
import (
"fmt"
"strings"
"github.com/google/uuid"
)
var namespace = uuid.NameSpaceURL
var value = "abc" + "hello world" + "bow"
var urls1 = []byte(value)
func main() {
fmt.Println("Generating UUIDs\n----------------")
generate()
}
func generate() {
//u, _ := uuid.NewUUID()
//fmt.Println("UUID version 1:", u)
var1 := uuid.NewSHA1(namespace, urls1)
fmt.Println(var1)
var2 := strings.Replace(var1.String(), "-", "", -1)
fmt.Println(var2)
}
但是我得到了以下错误,请帮我纠正错误:
./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
package main
import (
"fmt"
"strings"
"github.com/google/uuid"
)
var namespace = uuid.NameSpaceURL
var value = "abc" + "hello world" + "bow"
var urls1 = []byte(value)
func main() {
fmt.Println("Generating UUIDs\n----------------")
generate()
}
func generate() {
//u, _ := uuid.NewUUID()
//fmt.Println("UUID version 1:", u)
var1 := uuid.NewSHA1(namespace, urls1)
fmt.Println(var1 )
var2 = strings.Replace(var1, "-","",0)
fmt.Println(var2)
}
and i am getting, please help me to correct what i am wrong.
./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()
:
var2 := strings.ReplaceAll(var1.String(), "-", "")
(注意 var2
不存在,所以必须使用 :=
短变量声明 而不是简单的 赋值。)
这将输出以下结果(在 Go Playground 上尝试):
生成 UUID
----------------
7d470821-a66a-5d57-b54f-2784ca96c591
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()
:
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):
Generating UUIDs
----------------
7d470821-a66a-5d57-b54f-2784ca96c591
7d470821a66a5d57b54f2784ca96c591
答案2
得分: 0
icza的答案和解决方案是正确的,已被接受,并且目前有五个赞同票。部分代码如下:
var1 := uuid.NewSHA1(namespace, urls1)
var2 := strings.ReplaceAll(var1.String(), "-", "")
然而,如果你将其作为Go面试问题,你可能更喜欢以下方式:
func UUID5Hex(space uuid.UUID, data []byte) string {
uuid := uuid.NewSHA1(space, data)
return hex.EncodeToString(uuid[:])
}
uuid := UUID5Hex(namespace, urls1)
这里是一个示例代码。
面试官可能希望你应用奥卡姆剃刀原理。将UUID格式化为带有连字符的十六进制字符串,然后再移除连字符并不是最简洁的方法。
以下是一些Go基准测试结果:
BenchmarkUUID5Hex-12 3371100 337.4 ns/op 216 B/op 5 allocs/op
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,
var1 := uuid.NewSHA1(namespace, urls1)
var2 := strings.ReplaceAll(var1.String(), "-", "")
However, if you are given this as a Go interview question, you may prefer,
func UUID5Hex(space uuid.UUID, data []byte) string {
uuid := uuid.NewSHA1(space, data)
return hex.EncodeToString(uuid[:])
}
uuid := UUID5Hex(namespace, urls1))
https://go.dev/play/p/GJwKZKDTSvp
abchello worldbow
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:
BenchmarkUUID5Hex-12 3371100 337.4 ns/op 216 B/op 5 allocs/op
BenchmarkUUIDIcza-12 2845947 444.5 ns/op 232 B/op 5 allocs/op
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论