dongrui6787 2014-04-22 21:51
浏览 59
已采纳

如何在GO的全局范围内存储和获取指针引用

I have got the follow code:

package main


func main() {
    // create  a pointer referece of session of Mongo DB
session := mongoDB.CreateSession()

    // Question 1 : How to store a pointer reference in a global scope and using anywhere of the code  

defer session.Close()

    // Note I suppose that the code call to handler methods that call to the Process in the package controller(the last one code)

}

Code of creating a session of MongoDB

package mongoDB


func CreateSession() *mgo.Session {
session, err := mgo.Dial("192.168.0.108:27017/databasename")
if err != nil {
    panic(err)
}
session.SetMode(mgo.Monotonic, true)
return session
}

Place where I want to use the pointer reference that was store in the main

package controller


func Process()  {

    // Question 2 : How can a get the pointer reference store in Question 1 if is posible
collection := mongoDB.CreateCollection(session, "namedatabase", "colectionData")
mongoDB.InsertData(collection, "Ale", "45646565")

}

The idea is to avoid passing by reference session(my pointer reference in the main function) in every one of the functions created for all the project.

  • 写回答

1条回答 默认 最新

  • douji5746 2014-04-23 01:27
    关注

    You can't have your controller package import main. That is not a good idea (and I am quite sure it is not even possible). But that doesn't mean you can't have a global session variable in the controller.

    You can try this:

    package main
    
    import (
        "controller"
        "mongoDB"
    )
    
    func main() {
        // create  a pointer referece of session of Mongo DB
        session := mongoDB.CreateSession()
        defer session.Close()
    
        controller.SetDBSession(session) // Or controller.Init or whatever you like
    
        controller.Process()
    }
    

    And then in the controller package you have:

    package controller
    
    import "mongoDB"
    
    // Global session var for the package
    var session mongoDB.Session
    
    // SetDBSession sets the mongoDB session to be used by the controller package.
    // This function must be called before calling Process()
    func SetDBSession(s mongoDB.Session) {
        session = s
    }
    
    func Process() {
        collection := mongoDB.CreateCollection(session, "namedatabase", "colectionData")
        mongoDB.InsertData(collection, "Ale", "45646565")
    }
    

    Using this solution, you will only have to pass the session to the controller package once, letting main take care of the creating and closing of the session.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程