I cannot figure out why after calling ConnectToMongo
variable session
is still nil. I would understand it if ConnectToMongo
accepts not reference type like ConnectToMongo(session mgo.Session)
but reference variable type *mgo.Session
must be saved after returning function ConnectToMongo
package main
import (
"fmt"
"gopkg.in/mgo.v2"
)
func ConnectToMongo(session *mgo.Session) {
if session == nil {
var err error
session, err = mgo.Dial("localhost:27028")
if err != nil {
panic(err)
}
}
}
func main() {
var session *mgo.Session
ConnectToMongo(session)
if session == nil {
fmt.Println("nil. Why?")
}
}
It outputs:
nil. Why?
Update
package main
import (
"fmt"
"gopkg.in/mgo.v2"
)
func ConnectToMongo(session **mgo.Session) {
if session == nil {
var err error
*session, err = mgo.Dial("localhost:27028")
if err != nil {
panic(err)
}
}
}
func main() {
var session *mgo.Session
ConnectToMongo(&session)
if session == nil {
fmt.Println("nil. Why?")
} else {
fmt.Println("not nil. Ok.")
}
}
The same output:
nil. Why?