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

为什么这里不允许变量声明?

为什么这里不允许变量声明?

Go
慕沐林林 2021-11-08 17:04:06
为什么testC()在下面的go代码中编译失败?我希望该行为将与 的行为相匹配,testB()但err的范围仅限于 if 块。编译器提供的错误信息是 resp declared and not usedpackage mainimport "fmt"func main() {    testA()    testB()    testC()    testD()}// validfunc testA() {    resp, err := generateInt()    fmt.Println(fmt.Sprintf("Resp=%v Error=%v", resp, err))}// validfunc testB() {    var resp *int    resp, err := generateInt()    fmt.Println(fmt.Sprintf("Resp=%v Error=%v", resp, err))}// does not compilefunc testC() {    var resp *int    if resp, err := generateInt(); err != nil {        fmt.Println("error=%v", err)        return    }    fmt.Println("Resp=%d", *resp)}// validfunc testD() {    var resp *int    var err error    if resp, err = generateInt(); err != nil {        fmt.Println("error=%v", err)        return    }    fmt.Println("Resp=%d", *resp)}func generateInt() (*int, error) {    result := 5    return &result, nil}
查看完整描述

1 回答

?
侃侃尔雅

TA贡献1801条经验 获得超15个赞

在这个例子中:


var resp *int

if resp, err := generateInt(); err != nil {

该短变量声明被重新声明的resp变量。因为 if 语句的作用域在 if 块内部,所以它只隐藏该resp块中的第一个变量,而第一个未使用。


查看完整回答
反对 回复 2021-11-08
  • 1 回答
  • 0 关注
  • 206 浏览
慕课专栏
更多

添加回答

举报

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