亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將數據庫初始化為全局變量

將數據庫初始化為全局變量

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 關注
  • 271 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號