go - 未定义的错误变量

标签 go

作为 Go 的“新手”,我不确定为什么在编译程序时在控制台中收到错误 undefined errundefinded user

我有:

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)

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

更新 对此有点困惑。

我现在有:

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

cleanUser(&user)

我的错误现在是用户声明但未使用。我目前没有处理 err 部分,但我不确定为什么我会收到有关用户的错误。

最佳答案

这是因为您正在创建的 err 变量的范围:它仅在范围内(因此有效/可引用)直到您声明它的最内层 block 的末尾。

规范:Declarations and scope

The scope of a constant or variable identifier declared inside a function begins at the end of the ConstSpec or VarSpec (ShortVarDecl for short variable declarations) and ends at the end of the innermost containing block.

当您在 if 语句之前声明它时,它将在范围内直到容器 block 的末尾,其中还包括您测试 的第二个 if code>err 变量,这样就可以了。

更新:

更新您的更新:您使用了 Short variable declaration这会创建新变量,因为您在新 block 中使用了它。您没有使用这些新变量(只有在内部 block 外声明的“其他”user)因此出现编译时错误“user declared and not used”。 p>

解决方案很简单:只需在 if 之前声明两个变量,不要使用简短的变量声明,而是简单地 assignment :

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)

关于go - 未定义的错误变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32628568/

相关文章:

arrays - Go中从 slice 获取数组(语言)

go - golang 基准测试可以提供自定义输出吗?

bash - 在golang中一起执行bash echo和nc

go - 如何在 GoLang 中分离编码的 ecdsa 公钥和私钥

go - 如何通过 client-go 使用复杂的 LabelSelector 列出我的 k8s 作业?

go - 在 travis 的 golang 仓库上运行 lint

amazon-web-services - lambda 调用有效负载错误

json - 使用Golang从AWS api解析数据

go - 如何增加 golang.org/x/crypto/ssh 的详细程度

string - 用 iota 枚举字符串常量