1. 程式人生 > 其它 >EasyDSS/EasyNTS通過Golang使用http如何優化響應body未關閉的問題?

EasyDSS/EasyNTS通過Golang使用http如何優化響應body未關閉的問題?

我們大多數平臺都是用的Golang進行編譯的,在很多視訊流媒體軟體比如EasyDSS、EasyNTS等產品的編譯中,經常會出現要使用http介面訪問其他服務的介面的情況,一般的程式設計程式碼如下:

// 獲取 url 資料
func getUrl(url string) ([]byte, error) {
   client := http.Client{
      Timeout: 5 * time.Second,
   }
   resp, err := client.Get(url)
   if err != nil {
      return nil, fmt.Errorf("get url %s error : %s", url, err.Error())
   }
 
   body, err := ioutil.ReadAll(resp.Body)
   if err != nil {
      err = fmt.Errorf("get url %s readbody error %s", url, err.Error())
      return nil, err
   }
   return body, nil
}
 

近期在複查部分產品程式碼中,發現部分人員寫的程式碼基本為以上類似程式碼,其中有個非常需要注意的問題,即沒有將對應的響應Body關閉,短期不關閉程式碼不會出現什麼問題,但是該種程式碼會讓記憶體持續增高,導致系統資源的利用率降低。

為了優化這一問題,我們需要新增以下程式碼:

defer resp.Body.Close()
完整程式碼如下
// 獲取 url 資料
func getUrl(url string) ([]byte, error) {
   client := http.Client{
      Timeout: 5 * time.Second,
   }
   resp, err := client.Get(url)
   if err != nil {
      return nil, fmt.Errorf("get url %s error : %s", url, err.Error())
   }
 
   defer resp.Body.Close()
   body, err := ioutil.ReadAll(resp.Body)
   if err != nil {
      err = fmt.Errorf("get url %s readbody error %s", url, err.Error())
      return nil, err
   }
   return body, nil
}

  

該程式碼在原本程式碼上做了優化,進一步適應了使用者的使用,節約系統記憶體資源,如果大家後期在編譯中有此類需求,也可以參考以上程式碼做優化和調整。針對EasyDSS和EasyNTS的新功能開發或者編譯,我們也將不斷更新。如若還需瞭解更多TSINGSEE青犀視訊相關視訊雲服務或者其他編譯相關內容,歡迎關注。