go 1.22 增强 http.ServerMux 路由能力
之前
server
func main() {http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {fmt.Println("Received request:", r.URL.Path)fmt.Fprintf(w, "Hello, client! You requested: %s\n", r.URL.Path)})log.Println("Server is running on http://localhost:8080")if err := http.ListenAndServe(":8080", nil); err != nil {log.Fatal("ListenAndServe error: ", err)}
}
client
func main() {url := "http://localhost:8080/some-path"// 创建HTTP GET请求resp, err := http.Get(url)if err != nil {log.Fatal("HTTP GET error: ", err)}defer resp.Body.Close()// 读取响应体body, err := ioutil.ReadAll(resp.Body)if err != nil {log.Fatal("Error reading response body: ", err)}fmt.Println("Response from server:", string(body))
}
模式匹配优先级
如果两个模式重叠,那么更精确的模式优先。
如果 P1 符合 P2 请求的一个(严格)子集,P1 就比 P2 更精细
如果两者都不更具体,那么模式就会发生冲突
例外:
如果两个模式发生冲突,而其中一个有 HOST ,另一个没有,那么有 HOST 的模式优先。

example.com/ 比 / 更精细
因为第一个仅匹配主机 example.com 的请求,而第二个匹配任何请求
GET / 比 / 更精细
因为第一个仅匹配 GET 和 HEAD 请求,而第二个匹配任何请求
/b/{bucket}/o/default 比 /b/{bucket}/o/{noun} 更精细
第一个仅匹配第四个元素是文字 “default” 的路径,而在第二个中,第四个元素可以是任何内容
匹配方法
模式匹配将支持以 HTTP 方法开头,后跟空格,如 GET /demo 或 GET demo.com/ 中
带有方法的模式仅用于匹配具有该方法的请求
Go1.22 起,http.ServeMux 可以这么写:
mux.HandleFunc("POST /demo/create", func(w http.ResponseWriter, r *http.Request) {fmt.Fprint(w, "demo create")
})mux.HandleFunc("GET /demo/update", func(w http.ResponseWriter, r *http.Request) {fmt.Fprint(w, "demo update")
})
通配符
模式匹配将支持 {name} 或 {name…}
例如:/b/{bucket}/o/{objectname…}
该名称必须是有效的 Go 标识符和符合完整路径元素的标准
它们前面必须有斜杠,后面必须有斜杠或字符串末尾
例如:/b_{bucket} 不是有效的通配模式
Go1.22 起,http.ServeMux 可以这么写:
mux.HandleFunc("/demo/{id}", func(w http.ResponseWriter, r *http.Request) {id := r.PathValue("id")fmt.Fprint(w, "id %s", id)
})mux.HandleFunc("/demo/{path...}", func(w http.ResponseWriter, r *http.Request) {path := r.PathValue("path")fmt.Fprint(w, "path %s", path)
})
示例
server
func main() {http.HandleFunc("/demo/{id}", func(w http.ResponseWriter, r *http.Request) {id := r.PathValue("id")fmt.Fprintf(w, "id %s\n", id)fmt.Fprintf(w, "Hello, client! You requested: %s\n", r.URL.Path)})log.Println("Server is running on /demo/x")if err := http.ListenAndServe(":8080", nil); err != nil {log.Fatal("ListenAndServe error: ", err)}
}
client
func client() {url := "http://localhost:8080/demo/2?name=cucc"// 创建HTTP GET请求resp, err := http.Get(url)if err != nil {log.Fatal("HTTP GET error: ", err)}defer resp.Body.Close()// 读取响应体body, err := ioutil.ReadAll(resp.Body)if err != nil {log.Fatal("Error reading response body: ", err)}fmt.Println("Response from server:\n", string(body))
}
相关文章:
go 1.22 增强 http.ServerMux 路由能力
之前 server func main() {http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {fmt.Println("Received request:", r.URL.Path)fmt.Fprintf(w, "Hello, client! You requested: %s\n", r.URL.Path)})log.Println("Serv…...
赶紧收藏!2024 年最常见 20道设计模式面试题(二)
上一篇地址:赶紧收藏!2024 年最常见 20道设计模式面试题(一)-CSDN博客 三、解释抽象工厂模式,并给出一个实际应用的例子。 抽象工厂模式是一种创建型设计模式,用于创建一系列相关或依赖对象的接口&#x…...
Java面向对象设计 - Java泛型约束
Java面向对象设计 - Java泛型约束 无限通配符 通配符类型由问号表示,如<?> 。 对于通用类型,通配符类型是对象类型用于原始类型。 我们可以将任何已知类型的泛型分配为通配符类型。 这里是示例代码: // MyBag of String type M…...
什么是内存泄漏?如何避免内存泄漏?
**内存泄漏(Memory Leak)**是指在程序运行过程中,已经动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。内存泄漏具有隐蔽性、积累性的特征&#x…...
元组(tuple)(Python)
文章目录 一、定义二、常用操作 一、定义 tuple ("张三", "李四", "王二")二、常用操作 分类关键字/函数/方法说明查询元组[索引]根据索引取值,索引不存在会报错len(元组)元组长度(元素个数)值 in 元组&…...
【C++进阶学习】第二弹——继承(下)——挖掘继承深处的奥秘
继承(上):【C进阶学习】第一弹——继承(上)——探索代码复用的乐趣-CSDN博客 前言: 在前面我们已经讲了继承的基础知识,让大家了解了一下继承是什么,但那些都不是重点,今…...
LangChain-ChatGLM本地搭建|报错合集(win10)
安装过程 1. 创建虚拟环境 conda create -n langchain-chatglm python3.10 conda activate langchain-chatglm2. 部署 langchain-ChatGLM git clone https://github.com/imClumsyPanda/langchain-ChatGLMpip3 install -r requirements.txt pip3 install -U gradio pip3 inst…...
IP地址简介
一、IP地址 Internet Protocol Address,即网络层协议地址,是IP的缩写。 二、IP地址的作用 为什么不直接使用MAC,又加了一个IP地址呢? 事实上底层传输,最终使用的肯定是MAC地址,但是由于在以前&#x…...
谈吐的艺术
被人表扬,该怎么回应 你越是说自己其实没那么好, 对方出于客气, 就越是要证明你其实比你说的好得多。 O可能遇到的问题 每当工作和学习上做出点成绩,有人夸奖我的时候,我都会觉得很尴尬。因为不谦虚会得罪人ÿ…...
Linux 和 分区
文章目录 流程挂载设备文件名 Linux 下各分区的含义家目录 流程 在windows中,一个硬盘要使用只需要分区、格式化之后就可以使用了 在linux中,除了分区和格式化之外,还需要一个叫挂载的操作 挂载 挂载,就相当于windows环境下的写…...
⭐ ▶《强化学习的数学原理》(2024春)_西湖大学赵世钰 Ch3 贝尔曼最优公式 【压缩映射定理】
PPT 截取必要信息。 课程网站做习题。总体 MOOC 过一遍 1、视频 学堂在线 习题 2、过 电子书,补充 【下载:本章 PDF 电子书 GitHub 界面链接】 [又看了一遍视频] 3、总体 MOOC 过一遍 习题 学堂在线 课程页面链接 中国大学MOOC 课程页面链接 B 站 视频链…...
Pikachu上的CSRF以及NSSCTF上的[NISACTF 2022]bingdundun~、 [SWPUCTF 2022 新生赛]xff
目录 一、CSRF CSRF(get) login CSRF(post) CSRF Token 二、CSRF的相关知识点 (1)什么是CSRF? (2)工作原理 (3)CSRF漏洞形成的条件 1、用户要在登录状态(即浏览器保存了该…...
大数据分析-二手车用户数据可视化分析
项目背景 在当今的大数据时代,数据可视化扮演着至关重要的角色。随着信息的爆炸式增长,我们面临着前所未有的数据挑战。这些数据可能来自社交媒体、商业交易、科学研究、医疗记录等各个领域,它们庞大而复杂,难以通过传统的数据处…...
AI训练Checkpoint对存储的影响
检查点(Checkpoints)是机器学习和深度学习训练过程中的一个重要机制,旨在定期保存训练状态,以便在训练过程中遇到失败或中断时能够从中断处恢复训练,而无需从头开始。 随着模型参数量的剧增,Checkpoint文件…...
Python笔记 - 正则表达式
正则表达式(Regular Expression,简称regex)是一种强大的工具,用于匹配字符串模式。在Python中,正则表达式通过re模块提供。本文将带你深入了解Python中的正则表达式,从基础概念到高级用法。 1. 什么是正则…...
安卓网络通信(多线程、HTTP访问、图片加载、即时通信)
本章介绍App开发常用的以下网络通信技术,主要包括:如何以官方推荐的方式使用多线程技术,如何通过okhttp实现常见的HTTP接口访问操作,如何使用Dlide框架加载网络图片,如何分别运用SocketIO和WebSocket实现及时通信功能等…...
Virtual Memory Primitives for User Program翻译
Virtual Memory Primitives for User Program 安德鲁阿普尔(Andrew Appel)和李凯(Kai Li) 普林斯顿大学计算机科学系 摘要 传统上,内存管理单元(MMUS)被操作系统用于实现磁盘分页的虚拟内存…...
网络基础2
目录 应用层HTTP协议认识URLurlencode和urldecode HTTP协议格式http请求格式http响应格式 HTTP的方法GET与POST的区别 HTTP的状态码HTTP常见HeaderCookie与Session 传输层在谈端口号端口号范围划分认识知名端口号netstatpidof UDP协议UDP协议端格式UDP的特点面向数据报UDP的缓冲…...
C# 下载文件2
从服务下载压缩包 过程 发起请求 HttpWebRequest 断点续传 HttpWebRequest.AddRange() 获取服务资源的响应 HttpWebResponse 设置下载进度条 解压压缩包 ZipFile using System; using System.IO; using System.IO.Compression; using System.Net;namespace Test01 {clas…...
Unity | Tilemap系统
目录 一、准备工作 1.插件导入 2.资源导入 二、相关组件介绍 1.Grid组件 2.Tilemap组件 3.Tile 4.Tile Palette 5.Brushes 三、动态创建地图 四、其他功能 1.移动网格上物体 2.拖拽缩放地图 Unity Tilemap系统为2D游戏开发提供了一个直观且功能强大的平台ÿ…...
2026翅片管散热器哪家好榜单揭晓 工业烘干供暖靠谱品牌
一、引言:工业采暖烘干刚需,翅片管散热器成核心工业烘干与供暖领域,翅片管散热器凭借高效换热、耐用抗造、适配性强等优势,成为厂房采暖、物料烘干、公共空间控温的核心设备。随着工业节能升级与高端场景需求增长,市场…...
ReadCat小说阅读器完整指南:如何打造纯净无干扰的数字阅读空间
ReadCat小说阅读器完整指南:如何打造纯净无干扰的数字阅读空间 【免费下载链接】read-cat 一款免费、开源、简洁、纯净、无广告的小说阅读器 项目地址: https://gitcode.com/gh_mirrors/re/read-cat 在数字阅读日益普及的今天,广告弹窗、付费订阅…...
LinkSwift网盘直链下载助手:告别限速,实现九大网盘全速下载的终极指南
LinkSwift网盘直链下载助手:告别限速,实现九大网盘全速下载的终极指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里…...
科新永安电子锁-酒店门锁-幽冥大陆(一百20)—东方仙盟
对接线路图针对这种主板对接主板门锁常见故障自助解决2声---正确提示,表示是设置卡3声---门锁已反锁,解决方法:用能开反锁的卡或解除反锁6声---房号不对,解决方法:设置门锁的房号7声---卡已过期,解决方法&a…...
静态解算全流程详解——以华测 CGO 为例
应粉丝要求,以华测 CGO 软件为例,完整拆解 GNSS 静态解算从外业准备到成果输出的每一个环节。篇幅较长,建议先收藏再慢慢消化。 如果觉得有用,欢迎点赞、分享、转发,也特别感谢给我点赞赏的帅气粉丝!一、前…...
斗鱼股权曝光:腾讯持股40% 陈少杰持股18%
雷递网 乐天 5月13日斗鱼日前向美国SEC发布20-F文件,文件显示,截至2026年3月31日,腾讯一共持有 12,070,080股,占总股本的40%;斗鱼创始人、联席CEO陈少杰持股为18%。截至2026年3月31日,斗鱼股权结构Morgan S…...
揭秘低查重AI教材编写,AI工具助力快速生成专业教材!
许多教材编写者常常感到一种无奈:虽然教材的主体内容费尽心思地打磨完成,但因缺乏相应的配套资源,整体教学效果受到限制。设计课后练习时,需要的梯度化题型缺少新意;想要制作直观的课件,却又缺乏相关的技术…...
3个步骤解决OFD转PDF难题:开源工具Ofd2Pdf完全指南
3个步骤解决OFD转PDF难题:开源工具Ofd2Pdf完全指南 【免费下载链接】Ofd2Pdf Convert OFD files to PDF files. 项目地址: https://gitcode.com/gh_mirrors/ofd/Ofd2Pdf 作为一名财务人员,小张每月都要处理上百份OFD格式的电子发票。这些发票需要…...
如何快速将磁力链接转换为种子文件:面向资源管理者的完整解决方案
如何快速将磁力链接转换为种子文件:面向资源管理者的完整解决方案 【免费下载链接】Magnet2Torrent This will convert a magnet link into a .torrent file 项目地址: https://gitcode.com/gh_mirrors/ma/Magnet2Torrent 你是否曾因磁力链接失效而丢失珍贵资…...
智能体开发实战:从LLM工具调用到自主决策系统的架构指南
1. 项目概述与核心价值最近在开源社区里,一个名为DaMaxime/openclaw-agents-docs的项目引起了我的注意。乍一看,这像是一个围绕“OpenClaw Agents”的文档仓库,但当你深入进去,会发现它远不止是简单的API手册或使用说明。这个项目…...
