结构函数结束后指针被销毁

时间:2018-02-10 09:57:08

标签: mongodb pointers go

我是Golang的初学者很抱歉如果我的问题很愚蠢:| 我创建了一个只访问Database(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

每次构建并返回“nil”时,我都尝试在函数内部记录db.Session,这会返回正确的结构。

我认为我在使用指针做错了但是我看不出是什么。 你能帮我理解出了什么问题吗? 谢谢:))

0 个答案:

没有答案