为了账号安全,请及时绑定邮箱和手机立即绑定

如何正确初始化一些变量?

如何正确初始化一些变量?

Go
慕尼黑5688855 2022-01-17 16:13:23
如果我使用变量声明 into 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())为什么以及如何正确地做到这一点?
查看完整描述

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())


查看完整回答
反对 回复 2022-01-17
?
萧十郎

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())


查看完整回答
反对 回复 2022-01-17
?
扬帆大鱼

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())

    }

}

您可以在规范中阅读有关块和范围的更多信息。


查看完整回答
反对 回复 2022-01-17
  • 3 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信