当前位置: 首页 > 面试题库 >

未定义的err变量

沈龙光
2023-03-14
问题内容

作为Go“ newb”,我 不确定 在编译程序时为什么会在控制台中收到 未定义err未定义用户 的错误。

我有:

if req.Id == nil {
    user, err := signup(C, c, &req)
} else {
    user, err := update(C, c, &req)
}

if err != nil {
    c.JSON(http.StatusOK, err)
    return
}

doSomethingWith(user)

我意识到我可以在条件块之前声明errand user变量,但是我想知道为什么这不起作用。与一次性创建两个新变量有关吗?

UDPATE 对此有些混乱。

我现在有:

user := core.User{}
if req.Id == nil {
    user, err := signup(C, c, &req)
} else {
    user, err := update(C, c, &req)
}

cleanUser(&user)

和我的错误现在是 用户声明的,不使用 。目前,我还没有解决 错误的 部分,但是我不确定为什么会遇到用户错误。


问题答案:

这是因为err您正在创建的变量的作用域:它仅在作用域内(因此有效/可引用),直到您声明该变量的最里面的块的末尾为止。

规格:声明和范围

在函数内部声明的常量或变量标识符的范围始于ConstSpec或VarSpec的末尾(对于简短变量声明为ShortVarDecl),并
在最里面的包含块的末尾结束

当您在if语句之前声明它时,它将一直作用到容器块的末尾,该容器块还包括第二个if要测试err变量的位置,这样就可以了。

UDPATE:

更新到更新:您使用了Short变量声明来创建新变量,因为您在新块中使用了它。您没有使用这些新变量(仅在user内部块外部声明了“
other” ),因此发生了编译时错误“ user defined and not used”

解决方案很简单:只需在之前声明两个变量if,不要使用短变量声明,而只需赋值即可:

user := core.User{}
var err error

if req.Id == nil {
    user, err = signup(C, c, &req)
} else {
    user, err = update(C, c, &req)
}

if err == nil {
    cleanUser(&user)
}

或者使用一行来声明usererr

user, err := core.User{}, error(nil)


 类似资料:
  • 问题内容: 在jQuery的核心风格指南建议两种不同的方法来检查一个变量是否被定义。 全局变量: 局部变量: 特性: 为什么jQuery为什么对全局变量使用一种方法而对局部变量和属性使用另一种方法? 问题答案: 对于未声明的变量,将返回字符串文字,而身份检查将触发错误 “未定义foo” 。 对于局部变量(您 知道 已在某处声明),不会发生此类错误,因此进行身份检查。

  • 问题内容: 当我尝试引用永不设置或未设置的会话()时,我在核心CakePHP文件中出现错误: 我已经搜索了我的代码(在app /目录中),但是找不到对或的引用。我有什么想念的吗? 当我尝试运行任何单元测试时,都会显示此错误。这是正常的吗?我已经清除了目录,并用另一个目录(相同版本)替换了该目录,以确保我没有无意间修改了核心文件中的任何内容,但是仍然出现相同的错误。我不确定这是否只是框架中的缺陷或其

  • 我试图在MySQL中创建一个过程。这是正文: 但是当我保存它时,我得到这个错误: 处理您的请求时发生了一个或多个错误: 以下查询失败:“创建定义器”=root@localhost过程getAutoFinishTimeRemaining(按_order_id INT,按_Hoursint)非确定性读取SQL数据SQL安全定义器开始声明_date_delivered datetime;声明_date_

  • This sets the value of $undefined for Smarty, default is null. Currently this is only used to set undefined variables in $global_assign to a default value. 该变量为Smarty设定没有得到定义的变量的值,默认为空.当前仅用来设定全局配置中的未定

  • 问题内容: 我知道这是一个基本问题,但是我很好奇下面的代码为什么不起作用。没有用例不会声明此变量。 我得到错误 我确定这只是我还在学习的基本GOLANG内容。 谢谢你的支持 问题答案: 块有自己的范围。在您的情况下,它们在外部不可见。 您可以在修复前声明。 文件:https://golang.org/ref/spec#Declarations_and_scope 您可能还需要阅读:Go中的声明范围

  • 我是Reactjs新手,对未定义的变量有问题。在控制台日志中,我从以下React页面获得“未捕获引用错误:drawResults未定义app.js:116002”: 也许有人会建议如何修正这个错误。我在构造函数中声明了state变量,并尝试在fetchResults()方法中为其赋值,但脚本失败,变量未定义。