第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

我應(yīng)該多久在我的程序中調(diào)用 sql.Open?

我應(yīng)該多久在我的程序中調(diào)用 sql.Open?

Go
白板的微信 2021-11-22 15:03:12
正如標題所說,我不知道有多條sql.Open語句是好事還是壞事,或者我是否應(yīng)該有一個只有 init 的文件,例如:var db *sql.DBfunc init() {    var err error    db, err = sql.Open}只是想知道最佳實踐是什么。謝謝!
查看完整描述

1 回答

?
倚天杖

TA貢獻1828條經(jīng)驗 獲得超3個贊

您至少應(yīng)該檢查錯誤。

如“連接到數(shù)據(jù)庫”中所述:


請注意,Open不會直接打開數(shù)據(jù)庫連接:這會推遲到進行查詢時。要在進行查詢之前驗證是否可以建立連接,請使用以下Ping函數(shù):


if err := db.Ping(); err != nil {

  log.Fatal(err)

}

使用后,使用 Close 關(guān)閉數(shù)據(jù)庫。


如果可能,將打開的數(shù)據(jù)庫連接數(shù)限制為最少。

參見“ Go/Golang sql.DB 在函數(shù)中的重用”:


您不需要到處打開數(shù)據(jù)庫連接。

該database/sql包在內(nèi)部進行連接池,根據(jù)需要打開和關(guān)閉連接,同時提供可以同時使用的單個連接的錯覺。


正如elithrar在評論中指出的那樣,database.sql/#Open確實提到:


返回的數(shù)據(jù)庫對于多個 goroutine 并發(fā)使用是安全的,并維護自己的空閑連接池。

因此,該Open函數(shù)應(yīng)該只調(diào)用一次。

很少需要關(guān)閉數(shù)據(jù)庫。


正如這里提到的


*sql.DB全局聲明還有一些額外的好處,例如SetMaxIdleConns(調(diào)節(jié)連接池大?。┗驕蕚淇鐟?yīng)用程序的 SQL 語句。


你可以使用一個函數(shù)init,即使你沒有它也會運行main():


var db *sql.DB

func init() {

    db, err = sql.Open(DBparms....)

}

init()總是被調(diào)用,不管有沒有 main,所以如果你導(dǎo)入一個有 init 函數(shù)的包,它就會被執(zhí)行。每個包

可以有多個init()函數(shù),它們將按照它們在代碼中顯示的順序執(zhí)行(當然在所有變量都初始化之后)。


查看完整回答
反對 回復(fù) 2021-11-22
  • 1 回答
  • 0 關(guān)注
  • 183 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號