Указатель уничтожается после завершения функции структуры

Я начинающий Голанг, так что извините, если мой вопрос глуп:| Я создал класс для доступа к базе данных (MongoDB)

package network

import (
    "bytes"
    "gopkg.in/mgo.v2"
)

type DatabaseConfig struct {
    Host        string  `yaml:mongo_db_host`
    Port        string  `yaml:mongo_db_port`
    Name        string  `yaml:mongo_db_name`
    Username    string  `yaml:mongo_db_user`
    Password    string  `yaml:mongo_db_pass`
}

type Database struct {
    Session     *mgo.Session
    Config      DatabaseConfig
    IsOpen      bool
}

func (d Database) NewSession() error {
    url := bytes.Buffer{}
    url.WriteString("mongodb://")

    if d.Config.Username != "" && d.Config.Password != "" {
        url.WriteString(d.Config.Username)
        url.WriteString(":")
        url.WriteString(d.Config.Password)
        url.WriteString("@")
    }
    if d.Config.Host != "" {
        url.WriteString(d.Config.Host)
    }
    if d.Config.Port != "" {
        url.WriteString(":")
        url.WriteString(d.Config.Port)
    }
    if d.Config.Name != "" {
        url.WriteString("/")
        url.WriteString(d.Config.Name)
    }

    var err error
    d.Session, err = mgo.Dial(url.String())
    if err == nil {
        d.IsOpen = true
    }

    return err
}

func (d Database) GetSession() *mgo.Session {
    return d.Session
}

func (d Database) CloseSession() {
    d.Session.Close()
    d.IsOpen = false
}

func (d Database) GetConfig() DatabaseConfig {
    return d.Config
}

func (d Database) SetConfig(config DatabaseConfig) {
    d.Config = config   
}

Я создаю новый БД, как это:

db_config := network.DatabaseConfig{
    Host: "localhost",
    Port: "27017",
    Name: "meuporg",
}
db := network.Database{}
db.SetConfig(db_config)

err = db.NewSession()
log.Fatal(db.GetSession())

glbContainer.DB = db

И каждый раз, когда он собирает и возвращает мне "ноль", я пытался войти в db.Session внутри функции, и это возвращает мне правильную структуру.

Я думаю, что я делаю что-то не так с указателями, но я не вижу, что. Можете ли вы помочь мне понять, что происходит не так? Спасибо:)

0 ответов

Другие вопросы по тегам