为什么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
}
侃侃尔雅
相关分类