全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

如何使用Golang发送JSON请求_HTTP客户端传递结构体数据

用Go发送JSON请求需定义导出结构体并加json标签,用json.Marshal序列化,通过http.NewRequest构造POST请求并设Content-Type为application/json,再用http.Client发送,读取响应并解析。

用 Go 发送 JSON 请求很简单,核心是把结构体序列化为 JSON,再通过 http.Client 发起 POST(或其他方法)请求,同时设置正确的请求头。

定义结构体并导出字段

Go 的 json.Marshal 只能序列化首字母大写的导出字段。记得加 JSON 标签来控制键名:

type User struct {
    Name  string `json:"name"`
    Email string `json:"email"`
    Age   int    `json:"age"`
}

使用示例:

  • 字段名小写(如 name)不会被序列化 → 必须大写开头(Name
  • json:"name" 决定最终 JSON 中的字段名,不加标签则默认用结构体字段名
  • 空值处理可用 omitempty,例如 Phone string `json:"phone,omitempty"`

构造请求体并设置 Header

把结构体转成 JSON 字节流,作为请求体,并显式设置 Content-Type: application/json

user := User{Name: "张三", Email: "zhang@example.com", Age: 28}
jsonData, err := json.Marshal(user)
if err != nil {
    log.Fatal(err)
}

req, err := http.NewRequest("POST", "https://www./link/93a819cbd635bd1505ef0f804c21cc2a", bytes.NewBuffer(jsonData)) if err != nil { log.Fatal(err) } req.Header.Set("Content-Type", "application/json")

注意:

  • 别忘了 bytes.NewBuffer(jsonData) 把字节切片包装成 io.Reader
  • Header 必须手动设置,标准库不会自动加 Content-Type
  • 如果需要认证,可追加:req.Header.Set("Authorization", "Bearer xxx")

发送请求并读取响应

用默认或自定义的 http.Client 发送,检查状态码,再解析响应体:

client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
    log.Fatal(err)
}
defer resp.Body.Close()

if resp.StatusCode < 200 || resp.StatusCode >= 300 { log.Fatalf("HTTP error: %d", resp.StatusCode) }

body, _ := io.ReadAll(resp.Body) var result map[string]interface{} json.Unmarshal(body, &result) fmt.Printf("Response: %+v\n", result)

常见做法:

  • io.ReadAll 一次性读完响应体,避免残留
  • 根据 API 返回结构,定义对应响应结构体更安全(比 map[string]interface{} 类型强)
  • 生产环境建议设置超时:&http.Client{Timeout: 10 * time.Second}

封装成可复用函数

把重复逻辑抽出来,提升可读性和复用性:

func PostJSON(url string, payload interface{}) (*http.Response, error) {
    jsonData, err := json.Marshal(payload)
    if err != nil {
        return nil, err
    }
    req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
    if err != nil {
        return nil, err
    }
    req.Header.Set("Content-Type", "application/json")
return &http.Client{Timeout: 5 * time.Second}.Do(req)

}

调用示例:

resp, err := PostJSON("https://www./link/93a819cbd635bd1505ef0f804c21cc2a", User{
    Name:  "李四",
    Email: "li@example.com",
    Age:   30,
})
if err != nil {
    log.Fatal(err)
}
defer resp.Body.Close()

这样后续只需关注业务数据,不用每次写样板代码。


# js  # json  # go  # golang  # app  # 字节  # ai  # 状态码  # 标准库  # String  # 封装  # 结构体  # Interface  # 切片  # map  # http  # 字段名  # 序列化  # 复用  # 只需  # 很简单  # 自定义  # 再用  # 别忘了  # 不加  # 转成 


相关文章: 如何在宝塔面板创建新站点?  教学网站制作软件,学习*后期制作的网站有哪些?  零服务器AI建站解决方案:快速部署与云端平台低成本实践  如何通过智能用户系统一键生成高效建站方案?  深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?  如何选择香港主机高效搭建外贸独立站?  如何生成腾讯云建站专用兑换码?  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  相册网站制作软件,图片上的网址怎么复制?  建站之星代理商如何保障技术支持与售后服务?  济南网站制作的价格,历城一职专官方网站?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  如何制作算命网站,怎么注册算命网站?  建站与域名管理如何高效结合?  成都响应式网站开发,dw怎么把手机适应页面变成网页?  如何高效配置香港服务器实现快速建站?  建站之星后台密码如何安全设置与找回?  如何在建站之星网店版论坛获取技术支持?  建站之星CMS五站合一模板配置与SEO优化指南  微课制作网站有哪些,微课网怎么进?  建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析  如何用西部建站助手快速创建专业网站?  制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?  如何在企业微信快速生成手机电脑官网?  深入理解Android中的xmlns:tools属性  如何用VPS主机快速搭建个人网站?  建站主机服务器选购指南:轻量应用与VPS配置解析  保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?  如何选择最佳自助建站系统?快速指南解析优劣  如何选择适合PHP云建站的开源框架?  招商网站制作流程,网站招商广告语?  焦点电影公司作品,电影焦点结局是什么?  ,想在网上投简历,哪几个网站比较好?  如何在阿里云服务器自主搭建网站?  制作企业网站建设方案,怎样建设一个公司网站?  广州顶尖建站服务:企业官网建设与SEO优化一体化方案  专业商城网站制作公司有哪些,pi商城官网是哪个?  定制建站模板如何实现SEO优化与智能系统配置?18字教程  Thinkphp 中 distinct 的用法解析  如何选择高效可靠的多用户建站源码资源?  如何快速生成可下载的建站源码工具?  如何通过万网虚拟主机快速搭建网站?  如何在建站之星绑定自定义域名?  小程序网站制作需要准备什么资料,如何制作小程序?  交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?  如何在景安云服务器上绑定域名并配置虚拟主机?  C#怎么使用委托和事件 C# delegate与event编程方法  为什么Go需要go mod文件_Go go mod文件作用说明  建站之星如何助力网站排名飙升?揭秘高效技巧  网站制作网站,深圳做网站哪家比较好? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。