如果我在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
之外分配err
和if
来解决此问题:completeTime, err := time.Parse(time.RFC3339Nano, "2016-06-06 18:11:24.617Z")
if err != nil {
return
}
fmt.Println(time.Since(completeTime).Seconds())