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)