使用 := 会给出未使用的错误,但在 Go 中使用 = 不会
using := gives unused error but using = don't in Go
我有一段代码,当我使用 :=
时出现错误,但当我使用 =
时它编译正确。我了解到 :=
只需要至少定义一个变量,其他的不需要定义,但是考虑到这段代码是 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)
您正在隐藏您的 Session 变量。您的第一个示例是创建一个新的 Session 变量,现在它不会编译 b/c 另一个已声明但未使用。
运算符 :=
用于 short variable declaration。它声明并初始化变量。
在您的第一个示例中,您在全局范围内声明了 Session
变量,并且在 main
函数中您在主范围内声明了一个具有相同名称的新变量(正如您使用 :=
运算符)。因此,在全局范围内声明的 Session
变量未被使用,因此出现错误。
在您的第二个示例中,您使用赋值运算符 =
为全局变量分配了一个值,因此它不是声明一个新的 Session
变量,而是为现有的全局变量分配一个值。
请找到一个 example 显示全局变量和局部变量之间的差异。
当您使用 :=
时,变量定义在函数内。即变量的 scope 从全局变为局部。而且您没有在本地使用变量,因此出现编译错误。
我有一段代码,当我使用 :=
时出现错误,但当我使用 =
时它编译正确。我了解到 :=
只需要至少定义一个变量,其他的不需要定义,但是考虑到这段代码是 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)
您正在隐藏您的 Session 变量。您的第一个示例是创建一个新的 Session 变量,现在它不会编译 b/c 另一个已声明但未使用。
运算符 :=
用于 short variable declaration。它声明并初始化变量。
在您的第一个示例中,您在全局范围内声明了 Session
变量,并且在 main
函数中您在主范围内声明了一个具有相同名称的新变量(正如您使用 :=
运算符)。因此,在全局范围内声明的 Session
变量未被使用,因此出现错误。
在您的第二个示例中,您使用赋值运算符 =
为全局变量分配了一个值,因此它不是声明一个新的 Session
变量,而是为现有的全局变量分配一个值。
请找到一个 example 显示全局变量和局部变量之间的差异。
当您使用 :=
时,变量定义在函数内。即变量的 scope 从全局变为局部。而且您没有在本地使用变量,因此出现编译错误。