为什么变量是零,尽管我把对象的引用放在那里
why variable is nil although I put there reference to object
我不明白为什么在调用 ConnectToMongo
之后变量 session
仍然是零。我会理解如果 ConnectToMongo
不接受像 ConnectToMongo(session mgo.Session)
这样的引用类型,但是在返回函数 ConnectToMongo
之后必须保存引用变量类型 *mgo.Session
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?
您需要传递一个指向指针的指针来存储指针的值。否则,您正在将指针的值复制到 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?")
}
}
我不明白为什么在调用 ConnectToMongo
之后变量 session
仍然是零。我会理解如果 ConnectToMongo
不接受像 ConnectToMongo(session mgo.Session)
这样的引用类型,但是在返回函数 ConnectToMongo
*mgo.Session
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?
您需要传递一个指向指针的指针来存储指针的值。否则,您正在将指针的值复制到 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?")
}
}