我们大多数平台都是用的Golang进行编译的,在很多视频流媒体软件比如EasyDSS、EasyNTS等产品的编译中,经常会出现要使用http接口访问其他服务的接口的情况,一般的编程代码如下:
代码语言:javascript复制// 获取 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关闭,短期不关闭代码不会出现什么问题,但是该种代码会让内存持续增高,导致系统资源的利用率降低。
为了优化这一问题,我们需要添加以下代码:
代码语言:javascript复制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青犀视频相关视频云服务或者其他编译相关内容,欢迎关注。