新闻中心
Golang如何处理HTTP请求体和响应体_Golang HTTP请求响应操作指南
Go语言通过net/http库处理HTTP请求和响应体,服务端使用r.Body读取请求数据并及时关闭,可结合io.ReadAll或json.NewDecoder解析JSON;客户端则用http.Client发送带体的请求,需设置Content-Type头并编码数据;响应时通过w.WriteHeader和json.NewEncoder返回结果,注意资源释放与错误处理。

Go语言处理HTTP请求体和响应体非常直观,主要依赖标准库net/http。无论是构建Web服务端接收客户端数据,还是作为HTTP客户端调用外部接口,都需要正确读取请求体和写入响应体。下面介绍常见操作方式和注意事项。
读取HTTP请求体(Server端)
在服务端处理请求时,请求体数据通常通过r.Body获取,它是一个io.ReadCloser。需要手动读取并关闭。
常见做法:
- 使用
ioutil.ReadAll一次性读取整个请求体(适用于小数据) - 对JSON数据,通常配合
json.NewDecoder反序列化 - 记得调用
Body.Close()避免资源泄露
func handler(w http.ResponseWriter, r *http.Request) {
defer r.Body.Close()
body, err := io.ReadAll(r.Body)
if err != nil {
http.Error(w, "无法读取请求体", http.StatusBadRequest)
return
}
// 处理 body 数据
fmt.Fprintf(w, "收到数据: %s", string(body))
}
解析JSON请求体
大多数API使用JSON格式传输数据。Go可以通过结构体绑定简化处理。
步骤:
- 定义结构体字段并添加
json:标签 - 使用
json.NewDecoder(r.Body).Decode(&struct)解析 - 检查解码错误,如格式不合法或字段缺失
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
func createUser(w http.ResponseWriter, r *http.Request) {
var user User
if err := json.NewDecoder(r.Body).Decode(&user); err != nil {
http.Error(w, "JSON格式错误", http.StatusBadRequest)
return
}
fmt.Fprintf(w, "创建用户: %s, 年龄: %d", user.Name, user.Age)
}
发送响应体(Response Write)
响应体通过http.ResponseWriter写入,可以是字符串、JSON或其他格式。
Whimsical
Whimsical推出的AI思维导图工具
182
查看详情
关键点:
- 设置正确的Content-Type头,如
w.Header().Set("Content-Type", "application/json") - 使用
json.NewEncoder方便输出JSON -
状态码可通过
w.WriteHeader()指定
func getUser(w http.ResponseWriter, r *http.Request) {
user := map[string]interface{}{
"id": 1,
"name": "Alice",
}
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
json.NewEncoder(w).Encode(user)
}
作为HTTP客户端发送请求体
使用http.Client发起POST/PUT等带请求体的请求。
常用方法:
- 将JSON数据编码为字节流,用
bytes.NewReader包装成io.Reader - 设置请求头Content-Type
- 手动调用
resp.Body.Close()
data := map[string]string{"name": "Bob"}
body, _ := json.Marshal(data)
req, _ := http.NewRequest("POST", "https://api.example.com/users", bytes.NewReader(body))
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
// 读取响应
result, _ := io.ReadAll(resp.Body)
fmt.Println(string(result))
基本上就这些。Golang的HTTP处理机制简洁高效,只要掌握Body的读写方式、JSON编解码和Header设置,就能应对大多数场景。注意资源释放和错误处理,避免内存泄漏或静默失败。
以上就是Golang如何处理HTTP请求体和响应体_Golang HTTP请求响应操作指南的详细内容,更多请关注其它相关文章!
# 操作指南
# 鹰潭整站营销推广多少钱
# 互联网营销推广全托服务
# seo 营销、
# 舞钢专业建设网站
# spa seo 知乎
# 鄂州seo推广方案
# 常德抖音seo搜索推广
# 开发区网站优化团队介绍
# Hi营销推广数字货币
# 营销推广的途径和方法
# 它是
# 适用于
# 如何在
# 就能
# 资源管理
# js
# 如何处理
# 服务端
# 客户端
# 加载
# 标准库
# web服务端
# 状态码
# usb
# 字节
# app
# 编码
# go语言
# golang
# go
# json
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
4399免费游戏网址入口 4399小游戏免费入口点开即玩
Win10文件资源管理器“此电脑”分组怎么关 Win10恢复经典视图【技巧】
12306怎么选座位选到安静区_12306选座安静区域选择策略
铁路12306卧铺选择攻略 铁路12306下铺座位预定技巧
网易大神账号申诉需要多久_网易大神账号申诉流程说明
蛙漫移动版在线看 蛙漫手机浏览器直达入口
GemBox Document HTML转PDF垂直文本渲染问题及解决方案
微信客户端如何收红包_微信客户端接收红包使用教程
漫蛙2在线漫画入口 漫蛙正版漫画网页版直达
Go语言中JSON数据解析与字段访问教程
Golang如何实现简单的Web表单_Golang表单提交与验证处理方法
学习通在线学习平台 学习通网页版直接进入课程中心
CSS如何设置hover状态颜色_hover伪类调整背景或文字颜色
Yandex搜索引擎官网入口_俄罗斯Yandex免登录一键直达
如何优雅地扩展SprykerGlue后端API授权逻辑,使用spryker/glue-backend-api-application-authorization-connector-extension
解决macOS上安装pyhdf时‘hdf.h’文件缺失的编译错误
如何修改开机登录密码_Windows账户安全设置超详细教程【必学】
J*aScript中localStorage数据的获取、清洗与格式化教程
Python自定义类排序:解决lambda键值访问TypeError的实践指南
《刺客信条:影》PS5 Pro和Switch 2画面对比
哔哩哔哩忘记密码了怎么找回_哔哩哔哩密码找回方法
Django AJAX 文件上传教程:解决图片无法保存到模型的常见问题
b站怎么取消点赞_b站点赞取消操作方法
如何将HTML表格多行数据保存到Google Sheets
163邮箱网页版入口导航平台 163邮箱网页版登录入口官网导航
LocoySpider如何部署到云服务器_LocoySpider云部署的远程配置
铁路12306改签能改到更早的车次吗_铁路12306改签提前车次规则
曝R星经典之作开发图 设计简陋但信息密集!
单12V-2×6实现为RTX 5090供电750W!甚至都没敢跑分
优化 Jest 模拟:强制未实现函数抛出错误以提升测试效率
微信网页版官方入口教程 微信网页版网页版快速登录步骤
Win11如何开启讲述人功能 Win11屏幕阅读器(讲述人)开启与关闭【教程】
基于动态规划的房屋花卉种植最小成本算法详解
TikTok搜索结果不显示如何解决 TikTok搜索刷新优化方法
VS Code远程开发时如何处理文件权限问题
c++如何使用Meson构建系统_c++比CMake更快的构建工具
文本文档写html代码怎么运行_文本文档html代码运行步骤【教程】
从OpenAI API响应中高效提取生成文本
Typer应用中动态命令行参数的解析与处理
1688商家版怎样分析买家画像精准供货_1688商家版分析买家画像精准供货【供货策略】
sublime怎么格式化代码_sublime代码美化与一键排版插件配置
12306选座系统怎么选连座_12306选座多人连坐操作方法
192.168.1.1管理中心入口 192.168.1.1路由器网页设置平台
PySpark中高效提取字符串右侧可变长度数字:使用regexp_extract
windows10怎么查看硬盘序列号_windows10硬盘id查询命令
钉钉视频会议画面卡顿如何解决 钉钉会议画面优化方法
css滚动区域卡顿如何改善_css滚动问题用will-change优化渲染
J*aScript设计模式实践_j*ascript代码优化
高德地图怎么看全景照片_高德地图全景照片浏览教程
J*aScript对象创建方式_J*aScript设计模式应用


2025-11-18
浏览次数:次
返回列表
理HTTP请求和响应体,服务端使用r.Body读取请求数据并及时关闭,可结合io.ReadAll或json.NewDecoder解析JSON;客户端则用http.Client发送带体的请求,需设置Content-Type头并编码数据;响应时通过w.WriteHeader和json.NewEncoder返回结果,注意资源释放与错误处理。