我正在尝试解析 git 分支名称并拆分它们,以便我可以将远程名称和分支名称分开
以前我只是在第一个斜杠上拆分:
func ParseBranchname(branchString string) (remote, branchname string) {
branchArray := strings.Split(branchString, "/")
remote = branchArray[0]
branchname = branchArray[1]
return
}
Run Code Online (Sandbox Code Playgroud)
但我忘记了有些人也在 git 分支名称中使用斜杠,甚至多个!
现在我从分割中取出切片中的第一个元素,然后将每个元素移动一个完成并合并回斜线:
func ParseBranchname(branchString string) (remote, branchname string) {
branchArray := strings.Split(branchString, "/")
remote = branchArray[0]
copy(branchArray[0:], branchArray[0+1:])
branchArray[len(branchArray)-1] = ""
branchArray = branchArray[:len(branchArray)-1]
branchname = strings.Join(branchArray, "/")
return
}
Run Code Online (Sandbox Code Playgroud)
有没有更干净的方法来做到这一点?
Jon*_*art 12
使用strings.SplitNwithn=2将结果限制为两个子字符串。
func ParseBranchname(branchString string) (remote, branchname string) {
branchArray := strings.SplitN(branchString, "/", 2)
remote = branchArray[0]
branchname = branchArray[1]
return
}
Run Code Online (Sandbox Code Playgroud)
使用strings.Cut:
\n\n[此函数]
\ns围绕 的第一个实例sep进行切片,返回 之前和之后的文本sep。结果found报告是否sep出现在s. 如果sep没有出现s,则切回s, "", false。
func ParseBranchname(branchString string) (remote, branchname string) {\n remote, branchname, _ = strings.Cut(branchString, "/")\n return\n}\nRun Code Online (Sandbox Code Playgroud)\n(请注意,此代码片段忽略第三个返回值,一个布尔值,它告诉是否在输入字符串中找到了分隔符。)
\n正如 Go 1.18 发行说明中提到的,Cut “可以替换和简化Index, IndexByte, IndexRune, 和的许多常见用法SplitN”。特别是,SplitN与n=2.
Playground \xe2\x80\x94 最初由 @mkopriva 在评论\xe2\x80\x94中发布,修改后包含一个示例Cut:https ://go.dev/play/p/bjBhnr3Hg5O
| 归档时间: |
|
| 查看次数: |
2888 次 |
| 最近记录: |