为了账号安全,请及时绑定邮箱和手机立即绑定

将数据库初始化为全局变量

将数据库初始化为全局变量

Go
慕森王 2021-11-15 20:51:38
将 databaze 初始化为全局变量是个好主意吗?它可以工作吗?我在想这样的事情:func MustDB(d *sql.DB, err error) *sql.DB {   if err != nil {     log.Panic(err)   }   return d}// what I don't know - is how to call db.Close()// username and password can also be read similar wayvar db *DB = MustDB(db.Open(...))func MustPrepare(db *sql.DB, query string) *sql.Stmt {  res, err := sql.Prepare(db, query)  if err!=nil {    log.Panic(err)  }  return ret;}优点是,我可以简单地将准备好的 sql 语句创建为全局变量。我不必创建和管理存储,所有 sql 命令都将放在那里。只有我写:var s1 *sql.Stmt = MustPrepare(db, "SELECT * FROM MyTable")var s2 *sql.Stmt = MustPrepare(db, "INSERT INTO MyTable(col1, col2) VALUES(?,?)")var s3 *sql.Stmt = MustPrepare(db, "DELETE FROM MyTable WHERE col1=?")你认为,这种模式有用,还是根本行不通。
查看完整描述

3 回答

?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

在 go 中,您通常使用 Open(至少在您的数据库访问包中是全局的)初始化一个全局 *DB 结构。这不会打开与数据库的实际连接,而是创建一个连接池。因此,它应该只有一个实例。您可以在包的 init 中对其进行初始化。

请参阅 http://go-database-sql.org/ 或 https://www.vividcortex.com/blog/2015/01/14/the-ultimate-guide-to-building-database-driven-apps-with-去/ 一个很好的介绍指南。


查看完整回答
反对 回复 2021-11-15
?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

是的,这是一个很好的方法。当您阅读 go 文档时,它会清楚地告诉您

关闭 DB 很少见,因为 DB 句柄是长期存在的,并在许多 go 例程之间共享。

Go 维护自己的空闲连接池。因此,应该只调用一次 Open 函数。很少需要关闭数据库。


查看完整回答
反对 回复 2021-11-15
?
HUX布斯

TA贡献1876条经验 获得超6个赞

根据经验,我认为以这种方式使用数据库连接不是一个好习惯,您应该将其私有化,并根据需要打开/关闭它:)

但是,如果它有效并且您喜欢它,那么这样做并没有错。


查看完整回答
反对 回复 2021-11-15
  • 3 回答
  • 0 关注
  • 236 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信