【问题标题】:using := gives unused error but using = don't in Go使用 := 给出未使用的错误,但在 Go 中使用 = 不要
【发布时间】:2017-12-19 00:02:43
【问题描述】:

我有一段代码,当我使用:= 时出现错误,但当我使用= 时,它可以正确编译。我了解到:= 只需要定义至少一个变量,其他的不需要定义,但是考虑到这段代码是 Go 中的一个错误吗?

无法编译的代码:

错误:services/db_service.go:16:会话已声明且未使用

package services

import (
    "gopkg.in/mgo.v2"
    "log"
)

const DB = "mmdb_dev"

var Session *mgo.Session

func InitMongo() bool {
    url := "mongodb://localhost"
    log.Println("Establishing MongoDB connection...")
    //var err error
    Session, err := mgo.Dial(url)
    if err != nil {
        log.Fatal("Cannot connect to MongoDB!")
        return true
    } else {
        return false
    }
}

func GetNewSession() mgo.Session {
    return *Session.Copy()
}

编译后的代码

package services

import (
    "gopkg.in/mgo.v2"
    "log"
)

const DB = "mmdb_dev"

var Session *mgo.Session

func InitMongo() bool {
    url := "mongodb://localhost"
    log.Println("Establishing MongoDB connection...")
    var err error
    Session, err = mgo.Dial(url)
    if err != nil {
        log.Fatal("Cannot connect to MongoDB!")
        return true
    } else {
        return false
    }
}

func GetNewSession() mgo.Session {
    return *Session.Copy()
}

变化是

Session, err := mgo.Dial(url) 

var err error
Session, err = mgo.Dial(url)

【问题讨论】:

    标签: mongodb go compiler-errors mgo go-gin


    【解决方案1】:

    运算符:= 用于short variable declaration。它声明并初始化变量。

    在您的第一个示例中,您已在全局范围内声明了 Session 变量,并且在 main 函数中您已在主范围内声明了一个具有相同名称的新变量(因为您使用了 := 运算符)。因此,在全局范围内声明的Session 变量未使用,因此出现错误。

    在第二个示例中,您使用赋值运算符 = 为全局变量赋值,因此它不是声明新的 Session 变量,而是为现有全局变量赋值。

    请找到一个 example 显示全局变量和局部变量之间的差异。

    【讨论】:

      【解决方案2】:

      您正在隐藏 Session 变量。您的第一个示例是创建一个新的 Session 变量,现在它不会编译 b/c 另一个已声明但未使用。

      【讨论】:

        【解决方案3】:

        当您使用:= 时,变量定义在函数内。即变量的 范围 已从全局更改为本地。而且您没有在本地使用变量,因此会出现编译错误。

        【讨论】:

          猜你喜欢
          • 2021-10-20
          • 1970-01-01
          • 2020-05-30
          • 2020-12-12
          • 1970-01-01
          • 2019-05-27
          • 1970-01-01
          • 1970-01-01
          • 2017-08-17
          相关资源
          最近更新 更多