新闻中心
如何用Golang实现HTTP请求并处理响应_Golang HTTP请求响应实践
使用net/http库可轻松发起HTTP请求。1. 发送GET请求:调用http.Get()获取响应,需defer resp.Body.Close()防止资源泄漏。2. 自定义POST请求:用http.NewRequest()设置方法、URL和Body,添加Header如Content-Type和Authorization,通过http.Client发送。3. 设置超时:生产环境应使用自定义Client配置Timeout(如10秒),避免阻塞。4. 处理响应:检查StatusCode是否为2xx,读取Body并及时关闭。5. 解析JSON:将响应体通过json.NewDecoder或json.Unmarshal解析到结构体。正确处理错误和资源释放是关键。

在Go语言中发起HTTP请求并处理响应非常简单,标准库net/http提供了完整的支持。无论是调用第三方API、获取网页内容,还是与后端服务通信,都可以通过几行代码完成。
发送GET请求并读取响应
使用http.Get()可以快速发起一个GET请求。该方法返回一个*http.Response和一个错误。需要记得关闭响应体以避免资源泄漏。
示例:
package main
import (
"fmt"
"io"
"log"
"net/http"
)
func main() {
resp, err := http.Get("https://httpbin.org/get")
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Println("状态码:", resp.Status)
fmt.Println("响应内容:", string(body))
}
自定义请求头和POST请求
对于需要设置请求头或发送数据的场景,应使用http.NewRequest()创建请求对象,再通过http.DefaultClient.Do()发送。
常见于发送JSON数据到REST API。
示例:发送带Header的POST请求
import (
"bytes"
"encoding/json"
"fmt"
"log"
"net/http"
)
func postJSON() {
data := map[string]string{"name": "golang", "type": "program"}
payload, _ := json.Marshal(data)
req, err := http.NewRequest("POST", "https://httpbin.org/post", bytes.NewBuffer(payload))
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer token123")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
fmt.Println("状态码:", resp.StatusCode)
}
处理超时和错误
生产环境中必须设置超时,防止请求长时间挂起。可以通过自定义http.Client来控制连接、读写超时。
小云雀
剪映出品的AI视频和图片创作助手
1949
查看详情
建议配置:
- 设置合理的Timeout(如10秒)
- 检查响应状态码是否为2xx
- 始终关闭resp.Body
示例:
client := &http.Client{
Timeout: 10 * time.Second,
}
resp, err := client.Get("https://api.example.com/data")
if err != nil {
log.Printf("请求失败: %v", err)
return
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
log.Printf("非预期状态码: %d", resp.StatusCode)
return
}
解析JSON响应
多数API返回JSON格式数据,可使用json.Unmarshal将响应体解析为结构体。
示例:
type User struct {
ID int `json:"id"`
Name string `json:"name"`
}
var user User
err := json.NewDecoder(resp.Body).Decode(&user)
if err != nil {
log.Fatal(err)
}
fmt.Printf("用户: %+v\n", user)
基本上就这些。Golang的HTTP客户端设计简洁,配合标准库就能完成大多数网络请求任务。关键在于正确处理错误、关闭资源,并根据需要设置超时和请求头。不复杂但容易忽略细节。
以上就是如何用Golang实现HTTP请求并处理响应_Golang HTTP请求响应实践的详细内容,更多请关注其它相关文章!
# 正确处理
# 克州高级网站建设设计
# 医院网站建设招标说明
# 网络营销推广与策划练习题app
# 网站推广网址
# 项城网站建设路攻略
# 随州短视频营销推广
# 青岛seo外包费用公司
# seo蜘蛛喂养
# 南昌百度seo价格
# 宜昌网站建设创意
# 长时间
# 如何在
# 就能
# 资源管理
# js
# 可以通过
# 如何用
# 自定义
# 加载
# 标准库
# 状态码
# rest api
# ai
# 后端
# app
# go语言
# golang
# go
# json
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
优化Log4j2控制台输出性能:解决异步日志瓶颈
PHP URL参数传递与500错误调试指南
J*aScript中在Map循环中检测并处理空数组元素
如何在CSS中使用浮动制作导航栏_float实现水平菜单
12306选座怎么选到临时改签座_12306改签选座策略与步骤
高德地图总提示网络异常怎么办 高德地图离线导航设置与网络排查方法
优化MinIO list_objects_v2 操作的性能瓶颈与最佳实践
Golang指针如何与map组合使用_Golang map指针组合实践
AO3官方在线访问地址 Archive of Our Own最新镜像合集
铁路12306卧铺选择攻略 铁路12306下铺座位预定技巧
VS Code远程开发时如何处理文件权限问题
照顾宝贝2小游戏免费秒玩入口
在React函数组件中利用原生HTML5进行邮箱地址验证
Win10如何开启蓝牙功能_Windows10找不到蓝牙开关解决方法
如何将HTML表格多行数据保存到Google Sheets
CSS实现侧边栏导航项全宽圆角悬停背景效果
sublime侧边栏怎么增强功能_SideBarEnhancements for sublime安装与配置
Django AJAX 文件上传教程:解决图片无法保存到模型的常见问题
Win10如何清理注册表垃圾 Win10手动清理无效注册表【技巧】
Fabric Mod开发:在1.19.3+版本中正确添加自定义物品并管理物品组
Bilibili动漫最新防封地址发布-Bilibili动漫2025年最稳正版入口推荐
修复二维数组索引越界异常:一维循环到二维坐标的正确映射
CSS Flexbox与媒体查询:实现响应式布局中元素的并排与堆叠
如何使用纯J*aScript判断Input元素是否在特定类容器内
mysql密码锁定怎么解锁_mysql密码锁定解锁后修改密码步骤
电脑IP地址怎么查 查看本机IP地址的几种方法
冬*霸灯泡不亮怎么办_浴霸取暖灯一盏不亮的灯座清洁修复法
谷歌浏览器浏览体验优化_谷歌浏览器新版直连永久可用提示
红果短剧网页版官网入口 官方最新网址发布
抖音从哪里进入网页版_抖音官方入口链接
J*a编写用户注册与登录功能_掌握字符串与验证逻辑
CSS自定义字体样式被系统字体替换怎么办_font-face方式指定font-display控制渲染策略
天眼查怎么看公司融资情况 天眼查企业融资历史查询步骤【攻略】
Node.js CSV 数据处理:基于字段值条件过滤整条记录的策略
CKEditor 5 自定义构建在React应用中渲染失败的调试与解决
探索高级语言到原生C/C++的转译:挑战与内存管理策略
使用Pandas转换并合并DataFrame:多列映射至统一结构
Excel Power Pivot如何处理XML数据源 构建高级数据模型
Golang如何实现容器化日志收集与分析_Golang容器日志收集分析方法
C++如何操作大型数据集_使用C++流式处理(Streaming)技术避免一次性加载大文件
如何修改开机登录密码_Windows账户安全设置超详细教程【必学】
拷贝漫画电脑版官网入口 拷贝漫画(PC版)在线直达
C++ typeid如何获取类型信息_C++ RTTI运行时类型识别用法
ArrayList与LinkedList操作复杂度详解:遍历与修改
mc.js官网登录入口 mc.js官方登录入口最新版
夸克浏览器图书入口 夸克手机浏览器阅读入口
Django通过AJAX异步上传图片并保存至模型的完整指南
C++如何连接MySQL数据库_C++使用Connector/C++操作MySQL数据库教程
Python异步编程实践:使用Binance API构建实时交易数据流
大象笔记网页版入口 印象笔记网页版登录入口


2025-11-20
浏览次数:次
返回列表