news 2026/4/29 2:01:26

1.12 Go HTTP服务器进阶:路由、中间件、错误处理完整实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
1.12 Go HTTP服务器进阶:路由、中间件、错误处理完整实现

1.12 Go HTTP服务器进阶:路由、中间件、错误处理完整实现

引言

构建生产级的HTTP服务器需要路由管理、中间件机制和统一的错误处理。本文将深入讲解这些进阶功能,帮助你构建健壮的HTTP服务器。

一、路由管理

1.1 自定义路由器

packagemainimport("fmt""net/http")typeRouterstruct{routesmap[string]http.HandlerFunc}funcNewRouter()*Router{return&Router{routes:make(map[string]http.HandlerFunc),}}func(r*Router)HandleFunc(patternstring,handler http.HandlerFunc){r.routes[pattern]=handler}func(r*Router)ServeHTTP(w http.ResponseWriter,req*http.Request){handler,ok:=r.routes[req.URL.Path]if!ok{http.NotFound(w,req)return}handler(w,req)}funcmain(){router:=NewRouter()router.HandleFunc("/",func(w http.ResponseWriter,r*http.Request){fmt.Fprintf(w,"首页")})router.HandleFunc("/about",func(w http.ResponseWriter,r*http.Request){fmt.Fprintf(w,"关于")})http.ListenAndServe(":8080",router)}

1.2 使用Gorilla Mux

packagemainimport("fmt""net/http""github.com/gorilla/mux")funcmain(){r:=mux.NewRouter()// 精确匹配r.HandleFunc("/users",listUsers).Methods("GET")r.HandleFunc("/users",createUser).Methods("POST")// 路径参数r.HandleFunc("/users/{id:[0-9]+}",getUser).Methods("GET")r.HandleFunc("/users/{id:[0-9]+}",updateUser).Methods("PUT")r.HandleFunc("/users/{id:[0-9]+}",deleteUser).Methods("DELETE")// 子路由api:=r.PathPrefix("/api/v1").Subrouter()api.HandleFunc("/users",apiListUsers).Methods("GET")http.ListenAndServe(":8080",r)}

二、中间件机制

2.1 中间件基础

packagemainimport("fmt""log""net/http""time")typeMiddlewarefunc(http.HandlerFunc)http.HandlerFuncfuncLoggingMiddleware(next http.HandlerFunc)http.HandlerFunc{returnfunc(w http.ResponseWriter,r*http.Request){start:=time.Now()log.Printf("开始 %s %s",r.Method,r.URL.Path)next(w,r)log.Printf("完成 %s %s (耗时: %v)",r.Method,r.URL.Path,time.Since(start))}}funcAuthMiddleware(next http.HandlerFunc)http.HandlerFunc{returnfunc(w http.ResponseWriter,r*http.Request){token:=r.Header.Get("Authorization")iftoken==""
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/29 2:00:19

亲测有效:BSHM镜像实现精准人体分割

亲测有效:BSHM镜像实现精准人体分割 你是否遇到过这样的问题:想快速把人像从复杂背景中干净地抠出来,但用传统工具要花十几分钟调边缘、修发丝,用在线服务又担心隐私泄露、处理效果不稳定?最近我试了CSDN星图上的BSHM…

作者头像 李华
网站建设 2026/4/27 21:30:27

如何让GIMP秒变Photoshop?开源图像工具实现零成本界面迁移

如何让GIMP秒变Photoshop?开源图像工具实现零成本界面迁移 【免费下载链接】PhotoGIMP A Patch for GIMP 2.10 for Photoshop Users 项目地址: https://gitcode.com/gh_mirrors/ph/PhotoGIMP PhotoGIMP是一款专为Photoshop用户设计的开源图像工具&#xff0c…

作者头像 李华
网站建设 2026/4/23 22:51:01

基于SpringBoot+大数据Hadoop的的食物营养成分分析系统的设计与实现(精品源码+精品论文+上万数据集+答辩PPT)

博主介绍:CSDN毕设辅导第一人、靠谱第一人、全网粉丝50W,csdn特邀作者、博客专家、腾讯云社区合作讲师、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交…

作者头像 李华
网站建设 2026/4/23 22:51:00

想做虚拟主播?试试阿里Live Avatar数字人实战

想做虚拟主播?试试阿里Live Avatar数字人实战 你是否想过,不用绿幕、不请专业团队、不买昂贵动捕设备,就能在自家书房里打造一个24小时在线的AI虚拟主播?不是PPT式静态头像,而是能口型同步、表情自然、动作流畅、支持…

作者头像 李华
网站建设 2026/4/24 23:24:08

7个颠覆认知的AI围棋思维训练法:从棋力跃迁到认知升维

7个颠覆认知的AI围棋思维训练法:从棋力跃迁到认知升维 【免费下载链接】VinXiangQi Xiangqi syncing tool based on Yolov5 / 基于Yolov5的中国象棋连线工具 项目地址: https://gitcode.com/gh_mirrors/vi/VinXiangQi 在人工智能飞速发展的今天,A…

作者头像 李华
网站建设 2026/4/25 13:20:59

文件传输加速工具效率提升全攻略:从问题诊断到效果验证

文件传输加速工具效率提升全攻略:从问题诊断到效果验证 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 在大文件传输场景中,用户…

作者头像 李华