2015-01-16 6 views
-1

Я не могу понять, почему после вызова 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?

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

Тот же выход:

nil. Why? 

ответ

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

Спасибо, но тот же выход: 'nil. Почему? ' –

+1

произошла ошибка в предыдущем коде. 'if * session == nil' отметить' * '. Исправлена. – fabrizioM

 Смежные вопросы

  • Нет связанных вопросов^_^