英文:
Go Compilation Error: Declared but not used (Although used)
问题
我有以下的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
显然,该变量在最后的打印语句中被使用了,但它似乎被编译器隐藏了。我错过了什么?
英文:
I have the following Go example:
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)
}
When building this snipper, I get the following error:
> go build -o app .
.\app.go:14:3: numberOfUsers declared but not used
Clearly the variable is used in the last print statement, however it seems hidden from the compiler. What am I missing?
答案1
得分: 1
当使用:=
时,你正在声明一个新的变量。这意味着这里的numberOfUsers
:
numberOfUsers, err := strconv.Atoi(numberOfUsersStr)
实际上是遮蔽了你的另一个numberOfUsers
变量。
你可以通过事先声明err
,然后使用=
而不是:=
来修复它,这样你只是给变量赋一个新值,而不是声明一个新变量。
var err error
numberOfUsers, err = strconv.Atoi(numberOfUsersStr)
英文:
When using :=
, you're declaring a new variable. That means the numberOfUsers
here:
numberOfUsers, err := strconv.Atoi(numberOfUsersStr)
is actually shadowing your other numberOfUsers
variable.
You can fix it by declaring err
beforehand and then using just =
instead of :=
so that you are only assigning a new value to the variable and not declaring a new variable.
var err error
numberOfUsers, err = strconv.Atoi(numberOfUsersStr)
答案2
得分: 0
这行代码中的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("用户数量:%d", numberOfUsers)
}
请注意:=
(声明并赋值一个新变量)和=
(仅赋值)之间的区别。
英文:
The numberOfUsers
variable in this line is unused: numberOfUsers, err := strconv.Atoi(numberOfUsersStr)
.
Here you are redeclaring a new variable numberOfUsers
in the scope of the if
statement. This variable is not used in that scope, hence the error.
You probably want something like this:
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)
}
Notice the difference between :=
(declare an assign a new variable) and =
(only assign).
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论