【问题标题】:how to fill struct values with exec.Command().Output() command in Golang?如何在 Golang 中使用 exec.Command().Output() 命令填充结构值?
【发布时间】:2020-05-10 14:58:07
【问题描述】:

我在 Golang 中编写了以下代码,我需要将输出值传递到 dateStruct,有人可以帮我怎么做,或者即使有其他更好的方法可以将终端的命令输出传递到结构中?

type dateStruct struct {
    day string
    month string
    year string
}

func main()  {
    out, err := exec.Command("date").Output()
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("The date is %s\n", out)

    fmt.Println(dateStruct{})
}

【问题讨论】:

  • 你到底想做什么? exec.Command().Output() 因您正在执行的命令而异。如果您的最终目标是获取当前日期,则有更好的方法。
  • 正如@CeriseLimón 提到的,输出的格式很关键。我认为date 只是一个例子。理想情况下,如果您可以让命令以可解析格式(JSON、YAML 等)输出 - 那么您可以在命令的stdout 上使用Pipe,并将管道的io.Reader 直接传递给适当的Decoderjson.Decoderyaml.Decoder 等)

标签: go


【解决方案1】:

由于命令的输出可以是任何东西(可以是任何命令),您必须创建映射代码。

结构中的赋值可能如下所示:

ds:=&dateStruct{
day: parseDay(out),
month: parseMonth(out),
year: parseYear(out),
}

【讨论】:

  • 没错,命令的输出可以是任何命令。对于这种情况,我只有 4 个特定命令,并且正在寻找是否有任何其他方式来运行命令并获取输出。
  • 还要看看命令本身:有些会为您提供结构化输出(如 json、yaml 或 xml),让您的生活更轻松
猜你喜欢
  • 2018-11-06
  • 1970-01-01
  • 2018-04-20
  • 2015-04-25
  • 1970-01-01
  • 1970-01-01
  • 2018-04-04
  • 1970-01-01
  • 2016-12-28
相关资源
最近更新 更多