go語言中database下sql中的func Open 是長鏈結還是短鏈結

時間 2021-06-09 03:56:56

1樓:

sql.Open 不會建立連線 ,只會建立乙個DB例項,同時會建立乙個go程來管理該DB例項的乙個連線池(是長連線,但不是在Open的時候建立)。 在呼叫Begin()取乙個連線,回滾或者提交得時候歸還。

如果你直接使用時Exec()執行,則每次會從連線池裡面取出乙個連線,到Exec執行完畢的時候歸還。可以通過引數來調節連線池的大小。

golang sql包已經做了併發處理,自己通過channel的方式維護了乙個連線池,所以沒有必要在go程中加鎖共享。

關於每次sql.Open,我覺得應該是乙個不恰當的做法,這會導致連線得不到重用,並產生過多的短時間關閉的連線,給資料庫造成沒必要的壓力。

2樓:

我剛寫的乙個專案裡是open一次,然後其它go程裡加鎖共享使用。我的理解是乙個open占用乙個資料庫鏈結。

正在寫的專案裡準備用beego/orm,不用你管資料庫了,他幫你管理,不需要自己再open資料庫了。

go語言中的slice 型別指向陣列的位址到底是unsafe Point型別,還是uintptr型別?

gao xinge slice header裡面是unsafe.Pointer,還是uintptr?在runtime slice.go裡面,即在slice的定義裡面,但沒有暴露給使用者,使用的是unsafe.Pointer 在reflect value.go裡面,即暴露給使用者,用於反射操作,使用的...

如何在Mac系統下安裝R語言中 rattle這個包?

墨魚 OS 10.13.4 R 3.3.3 安裝rattle install.packages rattle dependencies TRUE 如果不能正常啟動rattle視窗 更新至最新版本 呼叫rattle library rattle 開啟rattle操作介面 rattle 尼莫船長 用過上...

C語言中用指標宣告字串在部分系統下執行有問題?

執行報錯很正常,在windows下如果你用vc編譯的話也會執行報錯,因為這是已初始化的資料,被放在所謂的靜態儲存區,預設在PE檔案的.rdata區段,這個區段是可讀取不可寫入的,寫入肯定會非法訪問。可以根據 余天公升的方法將字串放在棧裡,但是如果你一定要這麼做的話,那就在加上 pragma comm...