登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-04-09 21:09:34 121浏览 收藏

本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《如何返回整数字节数组中的最后一个元素》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~

问题内容

在 go 中,我想找到整数数组中的最后一个元素。

我有一个清单:

[0.0.1, 0.0.2, 0.0.3]

我只想:

0.0.3

每次我尝试返回控制台返回的最后一个元素

%!(extra uint8=10)

我认为这意味着我需要将字节数组转换为切片?

这是我的代码:

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 是换行符的编码。

现在,你的问题的核心是:

您有一个字节数组(切片)。

您试图将其解释为行(由“\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)

为什么这必须如此复杂?在 javascript 中我可以做 pop()

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

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

textout := string(bufout)
parts := strings.fields(textout)

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

git tag 命令的组合输出是由换行符分隔的 tags 列表。当您执行 cmd.combinedoutput() 时,它返回此值,但作为 []byte。现在,我相信您真正想要的是一个字符串列表。因此,您可以做的是将 out 字节数组转换为字符串,然后使用 strings.split() 函数将其按 \n 分割。然后您可以通过索引访问最后一个 tag

package main

import (
    "fmt"
    "reflect"
    "strings"
)

func main() {
  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))

  outString := string(out)
  outStringArray := strings.Split(outString, "\n")
  fmt.Printf("Last tag is: %s", outStringArray[len(outStringArray) - 1])
}

您应该在示例的控制台中看到 last 标记为:0.0.3

希望对您有所帮助。

好了,本文到此结束,带大家了解了《如何返回整数字节数组中的最后一个元素》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>