在 Go 中,我想找到整数数组中的最后一个元素。
我有一个列表:
[0.0.1, 0.0.2, 0.0.3]
我只想:
0.0.3
每次我尝试返回控制台返回的最后一个元素
%!(EXTRA uint8=10)
我假设这意味着我需要将字节数组转换为 slice ?
这是我的代码:
cmd := exec.Command("git", "tag")
out, err := cmd.CombinedOutput()
if err != nil {
log.Fatalf("cmd.Run() failed with %s\n", err)
}
fmt.Printf("Variable Type:\n%s\n", reflect.TypeOf(out))
fmt.Printf("Variable:\n%s\n", (out))
slice := out[0: len(out)]
releaseVersion := slice[len(slice) - 1]
fmt.Printf("release version:", releaseVersion)
这是输出:
Variable Type:
[]uint8
Variable:
0.0.1
0.0.2
0.0.3
release version:%!(EXTRA uint8=10)
最佳答案
您看到的原因:%!(EXTRA uint8=10)
是您在没有格式选项的情况下调用 Printf
。您应该改为调用 fmt.Println
。
10
是换行符的编码。
现在,你的问题的核心:
你有一个字节数组( slice )。
您正试图将其解释为行(由“\n”分隔的字符串)。
将字节数组解释为字符串很容易(假设字节实际上表示一个 utf-8 字符串):
// assume buf is []byte
var text = string(buf)
您想将其视为字符串列表。因为 git tag
返回行,你可以用 '\n' 分割,或者你可以调用 strings.Fields
,它按通用空格(包括换行符)分割;记录在这里:https://golang.org/pkg/strings/#Fields
var parts = strings.Fields(text)
现在您可以轻松地获取最后一个元素:
parts[len(parts)-1]
但为了安全起见,你应该检查列表是否有一些元素,否则你会在越界访问时崩溃。
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)
即将程序输出转换为由换行符分隔的字符串列表。
关于arrays - 如何返回整数字节数组中的最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57155164/