如何在Go的HTTP POST请求体中发送变量(在代码中声明)?

如何在Go的HTTP POST请求体中发送变量(在代码中声明)?,http,go,request,Http,Go,Request,我正在使用Golang的HTTP客户端,POST请求的格式如下: package main import ( "log" "github.com/monaco-io/request" ) var name,pass string. //assume name and pass hold a value calculated earlier func main() { client := request.Client{

我正在使用Golang的HTTP客户端,POST请求的格式如下:

package main

import (
    "log"

    "github.com/monaco-io/request"
)
var name,pass string.  //assume name and pass hold a value calculated earlier
func main() {
    client := request.Client{
        URL:    "https://google.com",
        Method: "POST",
        Params: map[string]string{"random": "random"},
        **Body:   []byte(`{"username": "ABC", "password": "XYZ"}`)**,
    }
    resp, err := client.Do()

    log.Println(resp.Code, string(resp.Data), err)
}

我想用变量名替换“ABC”,用变量传递替换“XYZ”。*我如何用一个变量替换一个常量字符串值,该变量保存在代码中某个函数中计算的字符串值。

只需使用
fmt.Sprintf
函数即可

fmt.Sprintf(`{“用户名”:“%s”,“密码”:“%s”}`,名称,密码)

完整的代码看起来像

主程序包
进口(
“fmt”
“日志”
“github.com/monaco io/request”//必须为v0.0.2
)
var name,pass string//假定name和pass保留先前计算的值
func main(){
客户端:=请求。客户端{
URL:“https://google.com",
方法:“张贴”,
Params:map[string]string{“random”:“random”},
正文:[]字节(fmt.Sprintf(`{“用户名”:“%s”,“密码”:“%s”}`,名称,密码)),
}
resp,err:=client.Do()
log.Println(响应代码、字符串(响应数据)、错误)
}

我尝试了上述函数,但当我将其放入请求正文的字节数组中时,无法使其工作。你能澄清一下正文的格式吗?我尝试了两种不同的格式:
Body:[]字节(fmt.Sprintf(
{“用户名”:“%s”,“密码”:“%s”}
,name,pass))
Body:[]字节(
fmt.Sprintf(
{“用户名”:“%s”,“密码”:“%s}
,name,pass)
但上述两种格式都给出了语法错误,您的错误响应是什么?也许我们可以先检查go.mod文件中包“MONACOIO/request”的版本。软件包“monaco io/request”在v1中有很多变化,您的用例只能在v0.0.2中使用。它表示意外的{,在我使用Body:[]字节({fmt.Sprintf(
{username:“&s”}
,name)})时需要表达式,格式动词是“%s”而不是“&s”。有更多信息。永远不要使用
fmt.Sprintf
来创建JSON。请执行实际的JSON封送处理!您要问的是如何封送JSON。在SO和Internet上有无数的示例。如果重复问题还不够,请搜索更多示例。