猿问

为什么变量是 nil 虽然我在那里放了对对象的引用

我无法弄清楚为什么调用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?


尚方宝剑之说
浏览 143回答 1
1回答
随时随地看视频慕课网APP

相关分类

Go
我要回答