Mongodb using:=给出未使用的错误,但using=don';不进去

Mongodb using:=给出未使用的错误,但using=don';不进去,mongodb,go,compiler-errors,mgo,go-gin,Mongodb,Go,Compiler Errors,Mgo,Go Gin,我有一段代码,当我使用:=时出错,但当我使用=时,它会正确编译。我学到的是,:=只需要定义至少一个变量,其他变量不需要定义,但是考虑到这段代码,它是Go中的一个bug吗 不可编译代码: 错误:服务/db\u服务。转到:16:已声明但未使用会话 package services import ( "gopkg.in/mgo.v2" "log" ) const DB = "mmdb_dev" var Session *mgo.Session func InitMongo()

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

不可编译代码:

错误:服务/db\u服务。转到: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) 


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

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

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

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

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


请查找显示全局变量和局部变量之间的差异。

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

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

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


请查找全局变量和局部变量之间的差异。

使用
时:=
变量定义在函数中。i、 e.变量的范围从全局变为局部。并且您没有在本地使用变量,因此存在编译错误。

当您使用
:=
时,变量定义在函数中。i、 e.变量的范围从全局变为局部。并且您没有在本地使用变量,因此编译错误

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