• 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青犀视频相关视频云服务或者其他编译相关内容,欢迎关注。


  • 相关阅读:
    Go语言核心36讲39
    Go语言核心36讲36
    django路飞项目
    设备原理操作
    arp原理实战.docx
    windows10 amd处理器 vmware16pro安装 macOS High Sierra 10.13 显示客户端禁用cpu
    傅里叶变换
    共情的神经生物基础
    网络安全基础
    记录垃圾MySQL的蛋疼失败(相对于mssqlserver)
  • 原文地址:https://www.cnblogs.com/TSINGSEE/p/14889221.html
Copyright © 2020-2023  润新知