Golang如何实现HTTP请求统计功能

使用中间件实现HTTP请求统计,通过StatsMiddleware记录请求数和耗时,结合atomic.LoadInt64保证并发安全,并暴露/stats接口返回统计信息,可扩展支持路径、方法分类及状态码捕获。

golang如何实现http请求统计功能

在Go语言中实现HTTP请求统计功能,通常可以通过中间件(Middleware)的方式,在不侵入业务逻辑的前提下,对所有进入的HTTP请求进行拦截和统计。下面介绍一种简单、实用的实现方式。

使用中间件记录请求数据

中间件是实现HTTP请求统计的核心。它在每个请求处理前和处理后执行一些额外逻辑,比如记录请求数、响应时间、状态码等。

定义一个计数器变量和简单的结构体来保存统计信息:

var requestCount int64

然后编写一个中间件函数:

立即学习“go语言免费学习笔记(深入)”;

func StatsMiddleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        requestCount++
        startTime := time.Now()
        
        next.ServeHTTP(w, r)
        
        duration := time.Since(startTime)
        log.Printf(“%s %s %v”, r.Method, r.URL.Path, duration)
    })
}

这个中间件递增请求数,并打印每个请求的处理耗时。

暴露统计接口

为了让外部能查看统计数据,可以添加一个专门的HTTP接口返回当前统计值:

帝国网站管理系统 v6.5 数据字典 帝国网站管理系统 v6.5 数据字典

该系统由帝国开发工作组独立开发,是一个经过完善设计的适用于Linux/windows/Unix等环境下高效的网站解决方案。从帝国新闻系统1.0版至今天的帝国网站管理系统,它的功能进行了数次飞跃性的革新,使得网站的架设与管理变得极其轻松。它采用了系统模型功能:用户通过此功能可直接在后台扩展与实现各种系统,如产品、房产、供求、等等系统,因此特性,[1] 帝国CMS又被誉为“万能建站工具”;采用了

帝国网站管理系统 v6.5 数据字典 407 查看详情 帝国网站管理系统 v6.5 数据字典

func HandleStats(w http.ResponseWriter, r *http.Request) {
    w.Header().Set(“Content-Type”, “application/json”)
    json.NewEncoder(w).Encode(map[string]interface{}{
        “requests”: atomic.LoadInt64(&requestCount),
    })
}

注意这里使用 atomic.LoadInt64 是为了保证并发安全,因为多个goroutine可能同时访问计数器。

集成到HTTP服务

将中间件应用到你的路由上。例如使用标准库的 net/http:

mux := http.NewServeMux()
mux.HandleFunc(“/stats”, HandleStats)
mux.HandleFunc(“/”, HomeHandler)

使用中间件包装整个mux:

loggedMux := StatsMiddleware(mux)
http.ListenAndServe(“:8080”, loggedMux)

这样所有经过mux的请求都会被统计。

增强功能建议

按路径、方法分类统计:可用 map[string]int 统计不同URL的访问次数 记录状态码分布:自定义 ResponseWriter 包装以捕获写入的状态码 定时输出或上报指标:结合 prometheus 客户端库可实现更专业的监控 使用原子操作或 sync.Mutex 保护共享变量,避免竞态条件

基本上就这些。通过中间件机制,Golang能很简洁地实现HTTP请求统计,既不影响业务代码,又具备良好的扩展性。

以上就是Golang如何实现HTTP请求统计功能的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1134157.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
如何用伪元素在div中间添加垂直居中的分割线?
上一篇 2025年12月2日 17:33:33
Flex布局元素过长导致左侧隐藏,如何解决?
下一篇 2025年12月2日 17:33:43

相关推荐

  • 百度小说怎么设置自动阅读翻页_百度小说自动翻页功能开启

    首先在百度小说阅读页面点击屏幕调出功能栏,找到“自动翻页”按钮并设置翻页间隔时间;随后可开启“亮度跟随”功能并调节翻页速度以优化阅读体验;最后建议启用定时关闭和双击暂停功能,提升操作便捷性与续航表现。 如果您在使用百度小说阅读时,希望解放双手并提升连续阅读体验,可以通过设置自动翻页功能来实现文本的定…

    2026年8月27日
    000
  • 支付宝如何取消授权登录_支付宝授权登录解绑的步骤方法

    可通过支付宝客户端或官网管理授权,进入【隐私】-【授权管理】解除第三方权限,或修改密码强制终止访问。 如果您在使用第三方网站或应用时通过支付宝进行了授权登录,但后续不再希望其访问您的个人信息,则可以进入支付宝管理已授权的账号权限。通过关闭这些授权,您可以有效保护个人隐私和账户安全。 本文运行环境:小…

    2026年8月27日
    100
  • win11应用商店下载的应用找不到安装位置怎么办_win11应用安装路径问题修复方法

    通过PowerShell命令可准确查询Windows 11中Microsoft Store应用的安装路径;2. 若应用无法找到,可通过“设置”中的“修复”或“重置”功能恢复快捷方式和文件关联;3. 运行wsreset.exe可清除Microsoft Store缓存,解决安装信息异常问题;4. 最终可…

    2026年8月27日
    000
  • 方正证券新股申购怎么操作_方正证券新股申购详细步骤

    申购新股需满足T-2日前20个交易日日均持股市值沪市1万或深市5000元以上,开通对应板块权限,使用方正证券APP在交易时间提交顶格申购,T+2日16:00前确保中签资金足额扣款。 想用方正证券申购新股,其实流程和其他券商大体一致,关键是要满足条件、抓住时间点。下面把具体操作一步步说清楚,照着做就行…

    2026年8月27日
    000
  • 录音笔传输文件自动校验

    录音笔传输文件自动校验录音笔传输文件自动校验录音笔传输文件自动校验录音笔传输文件自动校验

    一、引言 校验文件完整性的重要性:在日常工作和生活中,我们常常需要从网络上获取各种数据,但这些下载的文件是否安全值得商榷;即使是安全的,如果下载不完整,也会导致文件不可用;更糟糕的是,文件可能被篡改,加入了木马、病毒或广告等。因此,下载数据时校验其完整性是非常必要的。 在小编(●—●)参与的项目中,…

    2026年8月27日 用户投稿
    000
  • 云同步文件占用本地空间怎么办_云同步文件占用本地空间如何优化详细教程

    通过设置选择性同步、启用按需下载、清理缓存、调整同步规则及使用网页端访问,可实现云文件不占本地空间。具体:1. 只同步必要文件夹;2. 开启OneDrive“文件随选”等功能,文件在线查看;3. 定期清理客户端缓存;4. 关闭非必要自动同步(如下载、截图);5. 归档文件仅云端存储,需要时再下载。合…

    2026年8月27日
    200
  • excel如何一次性取消所有超链接_excel批量删除超链接技巧

    1、使用“查找和替换”功能,输入^k并全部替换为空,可保留文本清除超链接;2、通过VBA宏执行ActiveSheet.Hyperlinks.Delete命令,一键删除当前页所有超链接;3、复制数据后以“值”或“无格式文本”粘贴,即可去除超链接保留纯文本内容。 如果您在Excel中处理包含大量超链接的…

    2026年8月26日
    100
  • VSCode怎么调出HTML模板_VSCode快速生成HTML基础模板结构教程

    答案:在VSCode中输入!后按Tab键即可快速生成HTML5模板,也可使用html:5或doc等Emmet缩写,若失效需检查文件类型和设置,还可通过自定义snippets.json实现个性化模板。 在VSCode中快速生成HTML基础模板结构,最直接也最常用的方法就是利用其内置的Emmet功能。你…

    2026年8月26日
    000
  • 如何高效集成PipedriveCRM?devio/pipedrive助你轻松搞定!

    可以通过一下地址学习composer:学习地址 想象一下,你的php应用需要和pipedrive crm无缝对接:每当用户在你的网站上提交一个表单,你就需要自动在pipedrive中创建一个新的联系人或交易;或者,你需要从pipedrive拉取最新的客户数据,用于你的内部报表系统。听起来很酷,对吗?…

    用户投稿 2026年8月26日
    100
  • 老柚如何注销账号

    在如今高度数字化的环境中,我们频繁在各类应用中注册账号以享受多样化服务,但有时也会因个人需求变化而选择退出。老柚作为广受用户喜爱的应用之一,若你决定停止使用,掌握正确的账号注销流程显得尤为关键。 一、注销前需注意的事项 在正式申请注销之前,建议你提前完成几项准备工作。首先,务必将与老柚相关的所有重要…

    2026年8月26日
    000
  • 酷狗音乐官网版入口-酷狗音乐音乐人平台官网登录入口​

    酷狗音乐官网入口为www.kugou.com,进入后可登录使用网页版听歌,支持搜索、播放、建歌单等功能;音乐人可通过官网开放平台入驻,完成资料提交后上传作品并获取收益。 酷狗音乐官网版入口在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来酷狗音乐官网版入口以及酷狗音乐人平台官网登录入口相关信…

    2026年8月26日
    000
  • 儿童节礼物-BlueKeep漏洞POC恐怖来袭

    儿童节礼物-BlueKeep漏洞POC恐怖来袭儿童节礼物-BlueKeep漏洞POC恐怖来袭儿童节礼物-BlueKeep漏洞POC恐怖来袭儿童节礼物-BlueKeep漏洞POC恐怖来袭

    0x00:简介 (BlueKeep漏洞的编号为CVE-2019-0708) 据外媒SecurityWeek报道,近百万设备存在BlueKeep高危漏洞的安全风险,并且已有黑客开始扫描寻找潜在的攻击目标。 此漏洞被描述为可蠕虫式传播(wormable),通过RDS服务传播恶意程序,类似于2017年横行…

    2026年8月26日 用户投稿
    000
  • 晋江app的“灌溉营养液”有上限吗_晋江营养液灌溉数量与规则说明

    晋江App中,用户每日最多赠送10瓶营养液,支持单本作品上限为5瓶,每日额度零点重置;营养液可通过注册奖励、签到或购买VIP获取;累计灌溉达3000瓶可获“人气园艺师”称号。 如果您在使用晋江App阅读小说时,想要通过“灌溉营养液”来支持作者,但不确定每日或总量是否有上限,以下是关于该功能的具体规则…

    2026年8月26日
    000
  • Bing浏览器国际版大陆能用吗_Bing国际版在国内的访问与使用情况

    Bing国际版可通过https://www.bing.com访问,中国大陆用户可能被重定向至cn.bing.com,建议清除缓存或使用无痕模式并手动切换语言和地区;部分功能受限且搜索结果可能本地化,需稳定网络环境或代理工具以获得完整体验;登录Microsoft账户可同步设置,但无法访问中国大陆屏蔽的…

    2026年8月26日
    100
  • 星绘屋漫画app漫画下载步骤

    星绘屋漫画app漫画下载操作指南: 1、打开应用后,可通过首页的分类浏览寻找感兴趣的漫画作品,也可以使用顶部搜索框输入关键词查找目标漫画。 2、进入所选漫画的详情界面后,点击右下方的“下载”按钮,随后勾选需要保存到本地的章节,即可开始离线下载。 以上就是星绘屋漫画app漫画下载步骤的详细内容,更多请…

    2026年8月26日
    000
  • Windows安装WSL2

    Windows安装WSL2Windows安装WSL2Windows安装WSL2Windows安装WSL2

    windows subsystem for linux(简称wsl)是一个在windows 10上能够运行原生linux二进制可执行文件(elf格式)的兼容层。 微软官方安装文档地址: https://docs.microsoft.com/en-us/windows/wsl/install-manu…

    2026年8月26日 用户投稿
    000
  • 微信公众号怎么设置_微信公众号基础设置与菜单配置教程

    答案:微信公众号设置需完善头像、名称、功能介绍等基础信息,并合理配置自定义菜单。首先完成认证后,应立即设置清晰有辨识度的头像,命名易记且体现定位的账号名称,撰写直击用户痛点的功能介绍,并配置包含感谢语和引导内容的欢迎语;接着在自定义菜单中规划最多三个一级菜单,每个下设不超过五个二级菜单,将核心功能如…

    2026年8月26日
    100
  • 苹果怎么设浏览器默认_iPhone设置默认浏览器应用教程

    从iOS 14起可设第三方浏览器为默认。先确认Chrome、Edge等已支持并更新,再进入设置→浏览器→默认浏览器应用→选择对应浏览器,最后点击链接验证是否生效。 从iOS 14开始,苹果允许用户将第三方浏览器设为默认应用。虽然系统自带Safari仍是初始默认,但你可以轻松更换成Chrome、Edg…

    2026年8月26日
    100
  • windows提示“此应用已被管理员阻止”怎么办_“此应用已被管理员阻止”的解除方法

    首先检查并修改本地组策略设置,依次进入“用户配置→管理模板→系统”,将“不要运行指定的Windows应用程序”设为“未配置”;若问题仍存,查看AppLocker日志确认是否阻止,必要时禁用Application Identity服务;接着在Windows安全中心关闭SmartScreen筛选器或解除…

    2026年8月26日
    000
  • 如何利用Java使用ConcurrentHashMap处理并发

    ConcurrentHashMap因分段锁和CAS机制提升并发性能,支持原子操作如putIfAbsent、compute、merge,遍历时提供弱一致性视图,适用于高并发场景。 在多线程环境中,ConcurrentHashMap 是 Java 提供的一个高效且线程安全的 Map 实现。它比传统的 H…

    2026年8月26日
    000

发表回复

登录后才能评论
关注微信