Go 为什么变量是nil,尽管我在那个里放了对object的引用

Go 为什么变量是nil,尽管我在那个里放了对object的引用,go,mgo,Go,Mgo,我不明白为什么调用ConnectToMongo后变量session仍然是nil。如果ConnectToMongo接受的不是像ConnectToMongosession mgo.Session这样的引用类型,而是返回函数ConnectToMongo后必须保存引用变量类型*mgo.Session,我会理解的 它输出: 零。为什么? 使现代化 相同的输出: nil. Why? 您需要将指针传递给指针以存储指针的值。否则,您将复制指向ConnectToMongo函数的指针值 package main

我不明白为什么调用ConnectToMongo后变量session仍然是nil。如果ConnectToMongo接受的不是像ConnectToMongosession mgo.Session这样的引用类型,而是返回函数ConnectToMongo后必须保存引用变量类型*mgo.Session,我会理解的

它输出:

零。为什么?

使现代化 相同的输出:

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?")
    }
}

谢谢,但输出相同:无。为什么?以前的代码中有一个错误。如果*session==nil,请注意*。固定的
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?")
    }
}