用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"`
把结构体转成 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
Content-Type
req.Header.Set("Authorization", "Bearer x
xx")
用默认或自定义的 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 一次性读完响应体,避免残留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小时内与您取得联系。