我无法弄清楚为什么在调用ConnectToMongo
变量session
后仍然为零。如果ConnectToMongo
不接受ConnectToMongo(session mgo.Session)
之类的引用类型,但在返回函数*mgo.Session
后必须保存引用变量类型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?")
}
}
输出:
nil. Why?
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.")
}
}
相同的输出:
nil. Why?
答案 0 :(得分:2)
您需要将指针传递给指针以存储指针的值。否则,您正在将指针的值复制到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?")
}
}