%!(EXTRA uint8=10)Printffmt.Println
10

现在,问题的内容:

你有一个字节数组(slice)。

您试图将其解释为行(由'\n'分隔的字符串)。

将字节数组解释为string很容易(假设字节实际上代表一个utf-8字符串):

// assume buf is []byte
var text = string(buf)
git tagstrings.Fields
var parts = strings.Fields(text)

现在您可以轻松获得最后一个元素:

parts[len(parts)-1]

但为了安全起见,您应该检查list是否有一些元素,否则您将在out-of-bounds访问时崩溃。

cmd := exec.Command("git", "tag")
bufOut, err := cmd.Output()
if err != nil {
    log.Fatalf("cmd.Run() failed with %s\n", err)
}
textOut := string(bufOut)
parts := strings.Fields(textOut)
if len(parts) == 0 {
    log.Fatal("No tags")
}
releaseVersion := parts[len(parts)-1]
fmt.Println("release version:", releaseVersion)

WHY DOES THIS GOT TO BE SO COMPLEX? IN JAVASCRIPT I CAN JUST DO pop()

它并不是那么复杂。这就是计算机的工作原理。程序运行时,它有一个标准输出,本质上是一个字节流。

我猜javascript会自动执行此步骤:

textOut := string(bufOut)
parts := strings.Fields(textOut)

即将程序输出转换为由新行分隔的字符串的list。