簡體   English   中英

什么時候在長時間運行的 Go 程序中釋放資源?

[英]When to release resources in a long running Go program?

我正在使用Go 和 Socket.io構建聊天服務器因此服務器將無限期運行。 我需要在程序啟動時分配多種資源,例如數據庫連接、redis 連接等。

現在我想知道什么時候應該釋放(關閉)所有這些連接? 我可以在main函數中使用defer嗎? main到達終點時,這會關閉它們嗎? 或者我應該讓它們保持打開狀態,因為程序不會自行退出?

我傾向於做的一件事是:

func main() {
    if err := run(); err != nil {
        log.Fatal(err)
    }
}

func run() error {
    // Do stuff here
}

run您可以defer習慣defer 但是,在像服務器這樣的長時間運行的程序中,IMO 可以直接退出:操作系統將自動清理進程占用的所有資源,並且您連接到的任何數據庫或后端都必須能夠處理無論如何,進程意外死亡。 這稱為“僅崩潰的軟件”。

對於測試,您應該以不依賴於全局狀態的方式構建代碼 - 例如,有一個包含數據庫連接字段的結構體等。使業務邏輯成為該結構體上的方法(或采用它的函數) . 然后,您可以在main填充這樣的結構並調用其方法。 對於測試,您可以填充一個結構,為您想要執行的任何測試調用其方法,然后在測試結束時拆除連接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM