阻止golang http.NewRequest向帖子正文添加大括号

阻止golang http.NewRequest向帖子正文添加大括号,go,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.NewB

这必须相当简单,但我不明白为什么在使用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)
}
这导致:

{{"some":"test","json":"data"}}
在我的实际代码中,我使用json.Marshal和一个struct来生成字节缓冲区,但得到的结果相同。结果是API拒绝了请求(如预期的那样)


如何防止添加额外的大括号?

正文的打印表示与读取器的内容不同。NewRequest函数不向POST正文添加大括号

下面是发生的事情:

正文是一个文本,读卡器字段设置为
*字节.Buffer

fmt.Print
函数将
ioutil.nocloser
结构打印为
{
+字段+
}
。这是打印输出中的额外大括号集。fmt.Print函数通过调用
*bytes.Buffer.String
方法打印
读卡器
字段。
String
方法将内容作为字符串返回

身体是通过阅读而不是印刷来发送的