防止golang http.NewRequest向括号内添加括号

Mat*_*att 3 go

这必须相当简单,但是我无法弄清楚为什么在用go发出HTTP请求时,请求的主体被包裹在另外的花括号中:

package main

import (
    "bytes"
    "fmt"
    "net/http"
)

func main() {
    jsonStr := []byte(`{"some":"test","json":"data"}`)
    req, _ := http.NewRequest("POST", "http://test.com", bytes.NewBuffer(jsonStr))
    fmt.Print(req.Body)
}
Run Code Online (Sandbox Code Playgroud)

结果是:

{{"some":"test","json":"data"}}
Run Code Online (Sandbox Code Playgroud)

在我的实际代码中,我使用json.Marshal和一个用于生成字节缓冲区的结构,但得到的结果相同。结果是API拒绝了请求(按预期)。

如何防止添加多余的花括号?

Cer*_*món 5

正文的印刷表示形式与阅读器的内容不同。http.NewRequest函数不会在POST正文中添加括号。

这是怎么回事:

该主体是一个ioutil.nopCloser,其中Reader字段设置为*bytes.Buffer。

该fmt.Print函数将ioutil.nopCloser结构打印为{+字段+ }。这是打印输出中的大括号。fmt.Print函数Reader 通过调用*bytes.Buffer.String方法来打印字段。该String方法以字符串形式返回内容。

正文是通过阅读而不是通过打印发送的。