首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Go编译错误:已声明但未使用(尽管已使用)

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

Stack Overflow用户
提问于 2022-08-15 14:06:52
回答 2查看 81关注 0票数 -3

我有下面的围棋示例:

代码语言:javascript
复制
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)
}

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

代码语言:javascript
复制
> go build -o app .
.\app.go:14:3: numberOfUsers declared but not used

显然,变量是在最后一个print语句中使用的,但是它似乎隐藏在编译器中。我遗漏了什么?

EN

回答 2

Stack Overflow用户

发布于 2022-08-15 14:14:06

当使用:=时,您将声明一个新的变量。这意味着这里的numberOfUsers

代码语言:javascript
复制
numberOfUsers, err := strconv.Atoi(numberOfUsersStr)

实际上是跟踪另一个numberOfUsers变量。

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

代码语言:javascript
复制
var err error
numberOfUsers, err = strconv.Atoi(numberOfUsersStr)
票数 1
EN

Stack Overflow用户

发布于 2022-08-15 14:13:49

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

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

你可能想要这样的东西:

代码语言:javascript
复制
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)
}

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73362133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档