我有一个字符串的类型别名,
类型SpecialScopes字符串
我想用字符串连接一个这种类型的数组。
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函数?如果没有,那么最有效的方法是什么?我看到的一种方法是将数组中的所有元素强制转换为string,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, ","))
}
4条答案
按热度按时间brccelvz1#
这是最快的方法,而不使用不安全的。
基准代码:https://play.golang.org/p/DrB8nM-6ws
slwdgvem2#
下面是一个使用
unsafe
包的解决方案:https://play.golang.org/p/-wsHY2eCdc
hec6srdp3#
如果你真的想要快速的东西,这是Go中更快的方法:
完整示例:https://play.golang.org/p/McWjh1yxHf
我知道它看起来不像一个简单的.Join(),但它很容易阅读。
qfe3c7zg4#
如果你有多个类型别名,并且发现自己重复了相同的代码,你可以使用下面的 (如果你使用的是go 1.18或更高版本)
该函数可以像这样调用