3 回答
TA贡献1804条经验 获得超7个赞
您的代码中存在范围问题:
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。然后,由于运算符,您在语句中:=定义了另一个 ,它掩盖了第一个。completeTimeif
此外,未使用第二个变量,这就是您收到错误的原因。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())
TA贡献1815条经验 获得超12个赞
您需要在 if 之前声明它(如您所见)。您的示例中变量的范围仅限于“if”块。对不起,如果它看起来不好看,但它就是这样。请注意,您的第二个示例需要进行额外更改(请注意 if 行开头的 := 更改):
var completeTime time.Time
var err error
if completeTime, err = time.Parse(time.RFC3339Nano, "2016-06-06 18:11:24.617Z"); err != nil {
return
}
fmt.Println(time.Since(completeTime).Seconds())
TA贡献1799条经验 获得超9个赞
正如其他人所说,块内的变量不会提升到块外。else但是您可以在andelse if语句中使用声明的变量。
例如(播放中):
func main() {
if completeTime, err := time.Parse(time.RFC3339Nano, "2016-06-06 18:11:24.617Z"); err != nil {
fmt.Println(err)
} else {
fmt.Println(time.Since(completeTime).Seconds())
}
}
您可以在规范中阅读有关块和范围的更多信息。
- 3 回答
- 0 关注
- 151 浏览
添加回答
举报