news 2026/2/23 19:30:04

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/2/23 8:55:11

智能去重提升文献管理效率:Zotero Duplicates Merger插件全攻略

智能去重提升文献管理效率:Zotero Duplicates Merger插件全攻略 【免费下载链接】ZoteroDuplicatesMerger A zotero plugin to automatically merge duplicate items 项目地址: https://gitcode.com/gh_mirrors/zo/ZoteroDuplicatesMerger 在学术研究与文献管…

作者头像 李华
网站建设 2026/2/23 16:03:01

IBM 7B轻量模型Granite-4.0-H-Tiny:企业级智能新助手

IBM 7B轻量模型Granite-4.0-H-Tiny:企业级智能新助手 【免费下载链接】granite-4.0-h-tiny 项目地址: https://ai.gitcode.com/hf_mirrors/ibm-granite/granite-4.0-h-tiny 导语:IBM推出70亿参数轻量级大语言模型Granite-4.0-H-Tiny,…

作者头像 李华
网站建设 2026/2/22 15:43:48

解锁百度网盘高速下载秘诀:3大核心功能实现零成本提速

解锁百度网盘高速下载秘诀:3大核心功能实现零成本提速 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 你是否遇到过深夜加班时,重要项目文件却因百度网…

作者头像 李华
网站建设 2026/2/22 2:56:43

Z-Image-Turbo_UI界面历史画廊会加入吗?开发进展

Z-Image-Turbo_UI界面历史画廊会加入吗?开发进展 发布时间:2025年12月30日 最近不少用户在社区和镜像评论区反复问同一个问题:“Z-Image-Turbo_UI 界面什么时候能加上历史画廊?”——不是“能不能加”,而是“什么时候…

作者头像 李华
网站建设 2026/2/21 9:14:11

人工智能应用-机器听觉: 03.谐振现象

尝试对着一个装有半瓶水的瓶子吹气,如果力度和角度“恰到好处”,你会听到“呜呜”的声音。这种现象被称为“谐振”。 谐振是指当声源的频率与系统的固有频率一致时产生的叠加效应。 就像荡秋千时,如果推的节奏恰好与秋千的摆动频率相吻合&a…

作者头像 李华
网站建设 2026/2/20 15:31:35

Z-Image-Turbo_UI界面生成失败?可能是种子设置问题

Z-Image-Turbo_UI界面生成失败?可能是种子设置问题 你兴冲冲地启动了 Z-Image-Turbo 的 Web UI,浏览器打开 http://localhost:7860,界面加载成功,输入一段精心打磨的提示词,点击“生成图像”——结果却卡在进度条、报…

作者头像 李华