如果我在if中使用变量声明,则会收到错误undefined: completeTime

    if completeTime, err := time.Parse(time.RFC3339Nano, "2016-06-06 18:11:24.617Z"); err != nil {
          return
        }

    fmt.Println(time.Since(completeTime).Seconds())

但是如果我声明这一点,我会得到一个错误completeTime declared and not used
    var completeTime time.Time

    if completeTime, err := time.Parse(time.RFC3339Nano, "2016-06-06 18:11:24.617Z"); err != nil {
          return
        }

    fmt.Println(time.Since(completeTime).Seconds())

为什么以及如何正确执行?

最佳答案

您的代码中存在范围问题:

if completeTime, err := time.Parse(time.RFC3339Nano, "2016-06-06 18:11:24.617Z"); err != nil {
      return
}
fmt.Println(time.Since(completeTime).Seconds())

在此示例中,completeTime仅在if语句内为本地作用域定义,这意味着您不能在其外部使用它。
var completeTime time.Time

if completeTime, err := time.Parse(time.RFC3339Nano, "2016-06-06 18:11:24.617Z"); err != nil {
      return
    }

fmt.Println(time.Since(completeTime).Seconds())

这一点比较棘手。您可以在开头定义正确范围的completeTime var。然后,由于有了:=运算符,您可以在completeTime语句内定义另一个 if ,该语句将第一个掩盖。

另外,不使用第二个变量,这就是为什么会出现错误的原因。您可以通过简单地在completeTime之外分配errif来解决此问题:
completeTime, err := time.Parse(time.RFC3339Nano, "2016-06-06 18:11:24.617Z")

if err != nil {
    return
}

fmt.Println(time.Since(completeTime).Seconds())

09-07 08:54