这是因为
err您正在创建的变量的作用域:它仅在作用域内(因此有效/可引用),直到您声明该变量的最里面的块的末尾为止。
规格:声明和范围
在函数内部声明的常量或变量标识符的范围始于ConstSpec或VarSpec的末尾(对于简短变量声明为ShortVarDecl),并
在最里面的包含块的末尾结束 。
当您在
if语句之前声明它时,它将一直作用到容器块的末尾,该容器块还包括第二个
if要测试
err变量的位置,这样就可以了。
UDPATE:
更新到更新:您使用了Short变量声明来创建新变量,因为您在新块中使用了它。您没有使用这些新变量(仅在
user内部块外部声明了“
other” ),因此发生了编译时错误“ user defined and not used” 。
解决方案很简单:只需在之前声明两个变量
if,不要使用短变量声明,而只需赋值即可:
user := core.User{}var err errorif req.Id == nil { user, err = signup(C, c, &req)} else { user, err = update(C, c, &req)}if err == nil { cleanUser(&user)}或者使用一行来声明
user和
err:
user, err := core.User{}, error(nil)


