3 回答
TA贡献2051条经验 获得超10个赞
对于 Go >= 1.18,请参阅此答案。
对于 Go < 1.18:
使用strings.SplitNwithn=2将结果限制为两个子字符串。
func ParseBranchname(branchString string) (remote, branchname string) {
branchArray := strings.SplitN(branchString, "/", 2)
remote = branchArray[0]
branchname = branchArray[1]
return
}
TA贡献1816条经验 获得超6个赞
去 1.18
使用strings.Cut:
s [此函数]围绕 的第一个实例进行sep切片,返回之前和之后的文本sep。结果found报告是否sep出现在s. 如果sep没有出现s,则cut返回s, "", false。
func ParseBranchname(branchString string) (remote, branchname string) {
remote, branchname, _ = strings.Cut(branchString, "/")
return
}
(请注意,此代码片段忽略了第三个返回值,一个布尔值,它表明是否在输入字符串中找到了分隔符。)
正如 Go 1.18 发行说明中所述,Cut “可以替换和简化 、 、 和 的Index许多IndexByte常见IndexRune用法SplitN”。特别是,SplitN与n=2。
Playground——最初由@mkopriva 在评论中发布——修改为包含一个示例Cut:https ://go.dev/play/p/bjBhnr3Hg5O
TA贡献1862条经验 获得超6个赞
使用 strings.Index 查找第一个 / 的索引,然后使用该信息手动拆分:
func ParseBranchnameNew(branchString string) (remote, branchName string) {
firstSlash := strings.Index(branchString, "/")
remote = branchString[:firstSlash]
branchName = branchString[firstSlash+1:]
return
}
与您的原始代码比较:
goos: linux
goarch: amd64
BenchmarkParseBranchname-12 10000000 131 ns/op
BenchmarkParseBranchnameNew-12 300000000 5.56 ns/op
PASS
- 3 回答
- 0 关注
- 302 浏览
添加回答
举报