仅按 golang 中的第一个元素拆分字符串

我正在尝试解析 git 分支名称并将它们拆分,以便我可以将远程和分支名称分开


以前我只是在第一个斜杠上拆分:


func ParseBranchname(branchString string) (remote, branchname string) {

    branchArray := strings.Split(branchString, "/")

    remote = branchArray[0]

    branchname = branchArray[1]

    return

}

但我忘记了有些人也在 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

}

有没有更清洁的方法来做到这一点?


慕运维8079593
浏览 303回答 3
3回答

侃侃无极

对于 Go >= 1.18,请参阅此答案。对于 Go < 1.18:使用strings.SplitNwithn=2将结果限制为两个子字符串。func ParseBranchname(branchString string) (remote, branchname string) {&nbsp; &nbsp; branchArray := strings.SplitN(branchString, "/", 2)&nbsp; &nbsp; remote = branchArray[0]&nbsp; &nbsp; branchname = branchArray[1]&nbsp; &nbsp; return}

潇湘沐

去 1.18使用strings.Cut:s [此函数]围绕 的第一个实例进行sep切片,返回之前和之后的文本sep。结果found报告是否sep出现在s. 如果sep没有出现s,则cut返回s, "", false。func ParseBranchname(branchString string) (remote, branchname string) {&nbsp; &nbsp; remote, branchname, _ = strings.Cut(branchString, "/")&nbsp; &nbsp; return}(请注意,此代码片段忽略了第三个返回值,一个布尔值,它表明是否在输入字符串中找到了分隔符。)正如 Go 1.18 发行说明中所述,Cut “可以替换和简化 、 、 和 的Index许多IndexByte常见IndexRune用法SplitN”。特别是,SplitN与n=2。Playground——最初由@mkopriva 在评论中发布——修改为包含一个示例Cut:https ://go.dev/play/p/bjBhnr3Hg5O

阿波罗的战车

使用 strings.Index 查找第一个 / 的索引,然后使用该信息手动拆分:func ParseBranchnameNew(branchString string) (remote, branchName string) {&nbsp; &nbsp; &nbsp; &nbsp; firstSlash := strings.Index(branchString, "/")&nbsp; &nbsp; &nbsp; &nbsp; remote = branchString[:firstSlash]&nbsp; &nbsp; &nbsp; &nbsp; branchName = branchString[firstSlash+1:]&nbsp; &nbsp; &nbsp; &nbsp; return}与您的原始代码比较:goos: linuxgoarch: amd64BenchmarkParseBranchname-12&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;10000000&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;131 ns/opBenchmarkParseBranchnameNew-12&nbsp; &nbsp; &nbsp; 300000000&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5.56 ns/opPASS
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go