gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:59:18 27 4
gpt4 key购买 nike

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

编译器提供的错误信息是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
}

最佳答案

在这个例子中:

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

short variable declaration正在重新声明 resp 变量。因为 if 语句的作用域在 if block 内部,所以它只会隐藏该 block 中的第一个 resp 变量,而第一个未被使用。

关于go - 为什么这里不允许声明变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32725694/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com