Go编译错误:已声明但未使用(尽管已使用)



我有以下Go示例:

package main
import (
"fmt"
"log"
"os"
"strconv"
)
func main() {
numberOfUsers := 10
numberOfUsersStr, found := os.LookupEnv("NUMBER_OF_USERS")
if found {
numberOfUsers, err := strconv.Atoi(numberOfUsersStr)
if err != nil {
log.Fatalln(err)
}
}
fmt.Printf("Number of users: %d", numberOfUsers)
}

当构建这个狙击手时,我得到以下错误:

> go build -o app .
.app.go:14:3: numberOfUsers declared but not used

很明显,该变量是在最后一个print语句中使用的,但它似乎对编译器是隐藏的。我错过了什么?

使用:=时,正在声明一个变量。这意味着这里的numberOfUsers

numberOfUsers, err := strconv.Atoi(numberOfUsersStr)

实际上是在遮蔽您的另一个numberOfUsers变量。

您可以通过预先声明err,然后只使用=而不是:=来修复它,这样您只会为变量分配一个新值,而不会声明一个新变量。

var err error
numberOfUsers, err = strconv.Atoi(numberOfUsersStr)

此行中的numberOfUsers变量未使用:numberOfUsers, err := strconv.Atoi(numberOfUsersStr)

在这里,您将在if语句的作用域中重新声明一个新的变量numberOfUsers。此变量未在该范围内使用,因此出现错误。

你可能想要这样的东西:

func main() {
numberOfUsers := 10
numberOfUsersStr, found := os.LookupEnv("NUMBER_OF_USERS")
if found {
var err error
numberOfUsers, err = strconv.Atoi(numberOfUsersStr)
if err != nil {
log.Fatalln(err)
}
}
fmt.Printf("Number of users: %d", numberOfUsers)
}

注意:=(声明一个赋值新变量(和=(仅赋值(之间的区别。

相关内容

最新更新