gpt4 book ai didi

Golang : Use string. 加入字符串的类型别名

转载 作者:IT王子 更新时间:2023-10-29 00:41:59 24 4
gpt4 key购买 nike

我有一个类似字符串的类型别名

键入 SpecialScopes 字符串

我想使用 strings.Join 函数加入这种类型的数组

func MergeScopes(scopes ...SpecialScopes) SpecialScopes {
return strings.Join(scopes, ",")
}

但是上面我得到了错误

cannot use scopes (type []SpecialScopes) as type []string in argument to strings.Join
cannot use strings.Join(scopes, ",") (type string) as type SpecialScopes in return argument

有没有办法让 golang 意识到 SpecialScopes 只是字符串的另一个名称,并在其上执行 join 函数?如果不是,最有效的方法是什么?我看到的一种方法是将数组中的所有元素转换为字符串,连接,然后将其转换回 SpecialScopes 并返回值

更新 1:我有一个可以转换值的工作实现。对于更快的方法有什么建议吗?

func MergeScopes(scopes ...SpecialScopes) SpecialScopes {
var s []string
for _, scope := range scopes {
s = append(s, string(scope))
}

return SpecialScopes(strings.Join(s, ","))
}

最佳答案

这主要是不使用 unsafe 的最快方法。

func MergeScopes(scopes ...SpecialScopes) SpecialScopes {
if len(scopes) == 0 {
return ""
}
var (
sep = []byte(", ")
// preallocate for len(sep) + assume at least 1 character
out = make([]byte, 0, (1+len(sep))*len(scopes))
)
for _, s := range scopes {
out = append(out, s...)
out = append(out, sep...)
}
return SpecialScopes(out[:len(out)-len(sep)])
}

基准代码:https://play.golang.org/p/DrB8nM-6ws

━➤ go test -benchmem -bench=.  -v -benchtime=2s
testing: warning: no tests to run
BenchmarkUnsafe-8 30000000 109 ns/op 32 B/op 2 allocs/op
BenchmarkBuffer-8 20000000 255 ns/op 128 B/op 2 allocs/op
BenchmarkCopy-8 10000000 233 ns/op 112 B/op 3 allocs/op
BenchmarkConcat-8 30000000 112 ns/op 32 B/op 2 allocs/op

关于Golang : Use string. 加入字符串的类型别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40005892/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com