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