我有下面的围棋示例:
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语句中使用的,但是它似乎隐藏在编译器中。我遗漏了什么?
发布于 2022-08-15 14:14:06
当使用:=时,您将声明一个新的变量。这意味着这里的numberOfUsers:
numberOfUsers, err := strconv.Atoi(numberOfUsersStr)实际上是跟踪另一个numberOfUsers变量。
您可以通过预先声明err来修复它,然后只使用=而不是:=,这样您就只能为变量分配一个新值,而不是声明一个新变量。
var err error
numberOfUsers, err = strconv.Atoi(numberOfUsersStr)发布于 2022-08-15 14:13:49
该行中的numberOfUsers变量未使用:numberOfUsers, err := strconv.Atoi(numberOfUsersStr)。
在这里,您将在numberOfUsers语句的作用域中重新声明一个新变量if。此变量不在该范围内使用,因此出现错误。
你可能想要这样的东西:
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)
}注意:= (声明赋值为一个新变量)和= (仅赋值)之间的区别。
https://stackoverflow.com/questions/73362133
复制相似问题