dongzou3751 2015-07-04 07:11
浏览 200
已采纳

在Golang中与多个软件包共享全局定义的数据库连接

I've read a few StackOverflow answers on how we handling the db connection. Since it's a pool, we can define it globally and use it in multiple goroutines and it's safe.

The issue I'm having is that I have split my REST API into multiple packages. Each of these packages require a db connection, so I open a database connection in the startup. But even if I define the connection globally, it's only at the package level. What can I do to potentially share it among multiple packages?

For some context I'm using the PostgreSQL driver and gin-gonic in my application.

  • 写回答

2条回答 默认 最新

  • douwen1006 2015-07-05 08:35
    关注

    There is also the option of creating another package to hold your database connection-related settings. It can then have a package level global, which can be initialized in main and used in any package that is importing it.

    This way, you can explicitly see that the database package is being imported. Here is some sample code.

    package database
    
    var (
        // DBCon is the connection handle
        // for the database
        DBCon *sql.DB
    )
    

    package main
    
    import "myApp/database"
    
    func main() {
    
        var err error
        database.DBCon, err = sql.Open("postgres", "user=myname dbname=dbname sslmode=disable")
    
    }
    

    package user
    
    import "myApp/database"
    
    func Index() {
        // database handle is available here
        database.DBCon
    
        ...
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 机器人轨迹规划相关问题
  • ¥15 word样式右侧翻页键消失
  • ¥15 springboot+vue 集成keycloak sso到阿里云
  • ¥15 win7系统进入桌面过一秒后突然黑屏
  • ¥30 backtrader对于期货交易的现金和资产计算的问题
  • ¥15 求C# .net4.8小报表工具
  • ¥15 安装虚拟机时出现问题
  • ¥15 Selenium+docker Chrome不能运行
  • ¥15 mac电脑,安装charles后无法正常抓包
  • ¥18 visio打开文件一直显示文件未找到