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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Golang 訪問共享連接資源的最佳實(shí)踐?

Golang 訪問共享連接資源的最佳實(shí)踐?

Go
肥皂起泡泡 2021-11-01 16:56:28
在 golang(RabbitMQ、數(shù)據(jù)庫等)中處理與外部服務(wù)的共享連接資源的處理范圍的最佳實(shí)踐是什么?例如,給定這段代碼使用 database/sql、pq 和 http:func main() {    db, err := sql.Open("postgres", "user=root dbname=root")        if err != nil {        log.Fatal(err)    }    http.HandleFunc("/", front_handler)    http.HandleFunc("/get", get_handler)    http.HandleFunc("/set", set_handler)    http.ListenAndServe(":8080", nil)}使db對(duì)象可供我注冊(cè)的處理程序使用的最佳方法是什么?我是否將db聲明放在主要范圍之外(這會(huì)導(dǎo)致我在 Python 中出現(xiàn)單元測(cè)試問題,但在這里可能沒問題)?我是否將處理程序聲明放在主范圍內(nèi)(似乎不允許我嵌套函數(shù))?是否有我可以用來訪問主范圍的尋址方案(我會(huì)在 puppet 中做類似的事情)?還有其他選擇嗎?
查看完整描述

2 回答

?
陪伴而非守候

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超8個(gè)贊

有很多方法可以解決這個(gè)問題。首先,在此范圍內(nèi)打開連接后,您可能希望將其推遲到此處關(guān)閉。


db, err := sql.Open("postgres", "user=root dbname=root")

        if err != nil {

        log.Fatal(err)

    }

defer db.Close()

這將確保在您離開此范圍時(shí)清除連接。關(guān)于您的處理程序......將它們編寫為與連接相同范圍內(nèi)的閉包很簡單,因此您可以自由使用它。


編輯:澄清一下,你說你認(rèn)為你不能在 main.js 中嵌套函數(shù)。你可以用類似的東西來做到這一點(diǎn);


get_handler := func() {

      return db.ReadTheData()

}

http.HandleFunc("get", get_handler)


查看完整回答
反對(duì) 回復(fù) 2021-11-01
?
慕桂英4014372

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超13個(gè)贊

大多數(shù)應(yīng)用程序從全局范圍內(nèi)的數(shù)據(jù)庫處理程序開始是很常見的。sql.DB被定義為對(duì)并發(fā)訪問是安全的,因此可以被所有需要它的處理程序同時(shí)使用。


var db *sql.DB


func main() {

    var err error

    db, err = sql.Open("postgres", "user=root dbname=root")

    if err != nil {

        log.Fatal(err)

    }

...


查看完整回答
反對(duì) 回復(fù) 2021-11-01
  • 2 回答
  • 0 關(guān)注
  • 183 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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