arrays - 如何返回整数字节数组中的最后一个元素

标签 arrays go slice

在 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/

相关文章:

Java - 总结除特定部分之外的数组值

windows - 命令提示符下的 Go 语言的 godoc

python - 一次从 numpy 数组中选择多个切片

arrays - 以色列的结果不一致

c - 在 c 中按长度选择排序字符串

go - go get 取包时如何切换到golang.google.cn?

javascript - 为什么 .slice() 不能与 Float32Array() 一起使用,但可以与 Array() 一起使用? [JavaScript]

string - 如何将 int slice 的字符串转换为 int slice ?

c - 调用 bsearch 时获取 "error: invalid initializer"

go - 正确等待全局变量初始化