【问题标题】:Go Lang Error Handling Issue / Misunderstanding? [closed]Golang 错误处理问题/误解? [关闭]
【发布时间】:2018-02-27 10:16:53
【问题描述】:

好的,我正在使用以下代码,

err := r.ParseForm()
if err != nil {
    log.Panic(err)
}

var user User

err := decoder.Decode(&user, r.PostForm)
if err != nil {
    log.Panic(err)
}

现在,当我尝试运行此代码时,我收到以下错误,

no new variables on left side of :=

现在我知道这是由于使用了相同的变量,在本例中为 err,但我已经看到了很多其他开发人员如何处理错误处理的示例?

我一直使用的方式就是使用err1err2,这样我就可以构建代码了。

我已经阅读了文档,但有很多内容需要学习,并且一定错过了 err 变量是如何被重用的,还是我完全误解了一些东西?

谢谢,

【问题讨论】:

  • err := -> err =。 “还是我完全误解了什么?”是的,你似乎不明白:== 之间的区别
  • 我刚刚尝试使用 err = 得到以下结果 -> main.go:70:2: undefined: err
  • 第二个就是 =。 err 已在第一个中声明。如果说那行会有一个新变量,那么它就像 newVar, err := (现在左边有一个新变量)。
  • 查看整个错误,包括行号,应该会更清楚哪里出了问题。

标签: go


【解决方案1】:

你可以这样对待你的错误。

if err := r.ParseForm(); err != nil {
    log.Panic(err)
}

var user User
if err := decoder.Decode(&user, r.PostForm); err != nil {
    log.Panic(err)
}

或者全局定义你的error

var err error
err = r.ParseForm()

【讨论】:

    【解决方案2】:

    您重新声明了变量 err。您经常看到的是较短的错误处理语法:

    if err := DoSomething(); err != nil {
        // handle
    }
    

    在控制结构和 for 循环中声明的变量仅对该块可见。所以上面声明的err只能在if块中看到。

    【讨论】:

    • 谢谢 - 我不知道为什么我的问题被标记了。我不是很擅长阅读文档,您给我的一个简单的答案和详细信息对我有很大帮助。
    • 如果对您有帮助,请考虑接受我的回答 :)
    • 抱歉忘了你必须这样做
    猜你喜欢
    • 2015-03-29
    • 1970-01-01
    • 2014-07-31
    • 2019-05-23
    • 2016-01-11
    • 2016-07-06
    • 1970-01-01
    • 2016-02-26
    • 2010-09-28
    相关资源
    最近更新 更多