Golang http请求POST工作一次

时间:2018-06-13 09:59:18

标签: json http go

我有一个主人和奴隶。主有api调用结果,需要JSON。我有奴隶的proplem,它将这个结果发送给master,第一次我的代码发送json好,但第二次,代码停止(程序等待.....)resp, err := client.Do(req),当在master上创建查询时。 代码:

func main (){
    for {
        // some code, very long code
        sendResult(resFiles)
    }
}

func sendResult(rf common.ResultFiles) {
    jsonValue, err := json.Marshal(rf)
    req, err := http.NewRequest(methodPost, ResultAdress, 
                                bytes.NewBuffer(jsonValue))
    req.Header.Set("Content-Type", ContentType)
    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()
    fmt.Println("response Status:", resp.Status)
}

掌握api电话:

func result(c echo.Context) error {
    rf := &ResultFiles{}
    err := c.Bind(rf)
    if err != nil {
        log.Fatal(err)
    }
    rfChannel <- *rf
    return c.JSON(http.StatusOK, nil)
}

我的问题:为什么?可能是标准客户端golang(http.Client)或超时问题?如果我设置了timout - 我的代码因超时而崩溃)))预期...... 谢谢!

2 个答案:

答案 0 :(得分:0)

您需要为http.Client添加超时。默认情况下,http.Client将超时指定为0,这意味着根本没有超时。因此,如果服务器没有响应,那么您的应用程序将只是等待响应。本文Don’t use Go’s default HTTP client (in production)中详细介绍了此问题。虽然您创建自定义客户端,但仍需要指定超时。

答案 1 :(得分:0)

问题链接到通道,我将结果工作从站发送到主站到通道,但通道工作没有循环,我添加循环从通道读取数据和所有工作。