0

如何在 Go 上通过一个客户端准备两个 HTTP 请求而不会出现内存问题?

我有下一个代码:

func moduleView(url string) {
    var module Module
    httpClient := &http.Client{}
    moduleId, listHttpResponseCode := findEntity(httpClient, url)
    request, _ := http.NewRequest("GET", fmt.Sprintf("%s/api/getById/%s", coreURL, module.ID), nil)
    response, _ := httpClient.Do(request)
    statusOK := response.StatusCode >= 200 && response.StatusCode < 300
    if !statusOK {
        fmt.Println("Unable to get by name module: ", response.Status)
    } else {
        responseBody, _ := ioutil.ReadAll(response.Body)
        json.Unmarshal([]byte(strings.TrimSuffix(string(responseBody), "\n")), &module)
        fmt.Printf(module)
    }
    return nil
}

func findEntity(httpClient *http.Client, url string) int {
    var module Module
    request, _ := http.NewRequest("GET", fmt.Sprintf("%s/api/getByName", url), nil)
    response, _ := httpClient.Do(request)
    responseBody, _ := ioutil.ReadAll(response.Body)
    json.Unmarshal([]byte(strings.TrimSuffix(string(responseBody), "\n")), &module)
    statusOK := response.StatusCode >= 200 && response.StatusCode < 300
    if !statusOK {
        return Module{}, response.StatusCode
    }
    return module, response.StatusCode
}

两个请求都有效,如果单独使用没有错误。但是,如果尝试同时使用它们(从一个获取 ID,然后在另一个上处理此数据请求),我会遇到内存错误

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x38 pc=0x1334022]

请提供有关使用一个 httpClient 处理两个请求的正确性的想法?谢谢

4

0 回答 0