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

为什么testC()在下面的go代码中编译失败?我希望该行为将与 的行为相匹配,testB()但err的范围仅限于 if 块。


编译器提供的错误信息是 resp declared and not used


package main


import "fmt"


func main() {

    testA()

    testB()

    testC()

    testD()

}


// valid

func testA() {

    resp, err := generateInt()

    fmt.Println(fmt.Sprintf("Resp=%v Error=%v", resp, err))

}


// valid

func testB() {

    var resp *int

    resp, err := generateInt()

    fmt.Println(fmt.Sprintf("Resp=%v Error=%v", resp, err))

}


// does not compile

func testC() {

    var resp *int

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

        fmt.Println("error=%v", err)

        return

    }

    fmt.Println("Resp=%d", *resp)

}


// valid

func 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

}


慕沐林林
浏览 207回答 1
1回答

侃侃尔雅

在这个例子中:var resp *intif resp, err := generateInt(); err != nil {该短变量声明被重新声明的resp变量。因为 if 语句的作用域在 if 块内部,所以它只隐藏该resp块中的第一个变量,而第一个未使用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go