在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/GO/ golang 數(shù)據(jù)庫操作后關(guān)閉的正確姿勢?

golang 數(shù)據(jù)庫操作后關(guān)閉的正確姿勢?

這是一個(gè)問題帖,直接舉例子
如果有兩條sql語句要執(zhí)行

rows, err := db.Query("SELECT id, user_id, msg_send, add_time, order_id, pay, expo_id FROM `tp_order` WHERE status = 6")
if err != nil {
    DebugLog.Println("GET ORDER DATA ERR", err)
}
defer rows.Close()  
for rows.Next() {
    ...
}
rows, err = db.Query("SELECT xxx FROM xxx WHERE xxx")
if err != nil {
    DebugLog.Println("GET ORDER DATA ERR", err)
}
for rows.Next() {
    ...
}

如上示例,rows先后被兩次賦值
這樣調(diào)用 defer rows.Close()
會(huì)不會(huì)導(dǎo)致泄露?

回答
編輯回答
情未了

rows.next() 都把數(shù)據(jù)全部next 完是會(huì)自動(dòng)關(guān)閉,如果沒有那么就會(huì)出現(xiàn) 資源沒有回收,但超時(shí)后也會(huì)被回收,只是沒有那么及時(shí)。

2018年8月12日 17:06
編輯回答
陌璃

會(huì).

看db.Query的底層調(diào)用函數(shù)func (db *DB) queryDC(ctx, txctx context.Context, dc *driverConn, releaseConn func(error), query string, args []interface{}) (*Rows, error) ,每次返回的Rows都是一個(gè)全新的實(shí)例,其占用了一個(gè)driverConn(數(shù)據(jù)庫連接), 不釋放會(huì)導(dǎo)致泄露.

2017年11月8日 14:24