为什么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块中的第一个变量,而第一个未使用。
- 1 回答
- 0 关注
- 206 浏览
添加回答
举报
0/150
提交
取消