3 回答

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊
對(duì)于 Go >= 1.18,請(qǐng)參閱此答案。
對(duì)于 Go < 1.18:
使用strings.SplitNwithn=2將結(jié)果限制為兩個(gè)子字符串。
func ParseBranchname(branchString string) (remote, branchname string) {
branchArray := strings.SplitN(branchString, "/", 2)
remote = branchArray[0]
branchname = branchArray[1]
return
}

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個(gè)贊
去 1.18
使用strings.Cut:
s [此函數(shù)]圍繞 的第一個(gè)實(shí)例進(jìn)行sep切片,返回之前和之后的文本sep。結(jié)果found報(bào)告是否sep出現(xiàn)在s. 如果sep沒有出現(xiàn)s,則cut返回s, "", false。
func ParseBranchname(branchString string) (remote, branchname string) {
remote, branchname, _ = strings.Cut(branchString, "/")
return
}
(請(qǐng)注意,此代碼片段忽略了第三個(gè)返回值,一個(gè)布爾值,它表明是否在輸入字符串中找到了分隔符。)
正如 Go 1.18 發(fā)行說明中所述,Cut “可以替換和簡化 、 、 和 的Index許多IndexByte常見IndexRune用法SplitN”。特別是,SplitN與n=2。
Playground——最初由@mkopriva 在評(píng)論中發(fā)布——修改為包含一個(gè)示例Cut:https ://go.dev/play/p/bjBhnr3Hg5O

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超6個(gè)贊
使用 strings.Index 查找第一個(gè) / 的索引,然后使用該信息手動(dòng)拆分:
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 關(guān)注
- 342 瀏覽
添加回答
舉報(bào)