Reputation: 2474
I have piece of code in which I get error when I use :=
but when I use =
it compiles properly. What I learned is that :=
only requires only atleast one variable to be defined, others need not be defined, but considering this code is it a bug in Go?
Uncompilable code:
Error: services/db_service.go:16: Session declared and not used
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()
}
Compiled code
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()
}
The change is
Session, err := mgo.Dial(url)
to
var err error
Session, err = mgo.Dial(url)
Upvotes: 0
Views: 342
Reputation: 2974
When you use :=
the variable definition is within the function. i.e. the scope of the variable changed, from global to local. And you're not using variable locally, hence the compilation error.
Upvotes: 0
Reputation: 842
The operator :=
is used for short variable declaration. It declares and initializes the variable.
In your first example, you have declared Session
variable in global scope and in main
function you've declared a new variable having same name in the main scope (as you have used :=
operator). Therefore, the Session
variable declared in the global scope is unused and hence the error.
In your second example, you have assigned global variable a value using assignment operator =
and hence it is not declaring a new Session
variable but assigning a value to existing global variable.
Please find an example showing difference between global and local variable.
Upvotes: 4
Reputation:
You are shadowing your Session variable. Your first example is creating a new Session variable and now it won't compile b/c the other is declared but unused.
Upvotes: 2