golang 在使用 multipart/form-data 时挂起

golang hangs when using multipart/form-data

我想向电报发送一个空的 post 请求。 问题是如果我关闭 multipart 一次,它就会永远挂起:

 func main() {
    var requestBody bytes.Buffer
    multiPartWriter := multipart.NewWriter(&requestBody)
    multiPartWriter.Close()      // closing once
    req, _ := http.NewRequest("POST", "https://api.telegram.org/bot<telegram token>/getme", &requestBody)
    req.Header.Set("Content-Type", multiPartWriter.FormDataContentType())
    client := &http.Client{}
    client.Do(req)
} 

但是,如果我关闭 multipart 两次,它就会起作用。 谁能解释为什么会这样?

我刚刚查看了 Telegram API。

我想一般的问题是,您使用了未初始化的缓冲区。 您不需要缓冲区,请求中不需要任何有效负载。您可以将 nil 作为请求数据传递。像这样:

func main() {
    req, err := http.NewRequest("POST", "https://api.telegram.org/bot<token>/getme", nil)
    if err != nil {
        panic(err)
    }

    client := &http.Client{}

    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }

    result, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        panic(err)
    }

    println(string(result))
}

我还建议您查看文档 here 此文档可让您交互式试用 API,它还可以为每个请求生成代码。

为了生成Go代码示例,您可以点击右上角的按钮并选择您的Go。