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

Go 为什么这里不允许变量声明?,go,Go,为什么testC()在下面的go代码中编译失败?我希望该行为与testB()的行为相匹配,但err的范围仅限于if块 编译器提供的错误消息已声明且未使用 package main import "fmt" func main() { testA() testB() testC() testD() } // valid func testA() { resp, err := generateInt() fmt.Println(fmt.Sprin

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

编译器提供的错误消息已声明且未使用

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
}
在本例中:

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

正在重新说明
resp
变量。由于if语句的作用域是if块内部,因此它仅对该块内的第一个
resp
变量进行阴影处理,而不使用第一个变量

这是因为您没有使用内部变量,对吗?