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
变量进行阴影处理,而不使用第一个变量 这是因为您没有使用内部变量,对吗?