跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

Golang Web路由动态参数解析与处理示例

在Go语言开发Web服务时, 路由 动态参数是实现RESTful API的关键部分。通过路径中的占位符捕获变量,比如用户ID或文章标题,能构建灵活的接口。Gorilla Mux、Echo或 标准库 net/http都支持这类功能,下面以常用方式展示如何解析和处理动态参数。 使用 Gorilla Mux 处理路径参数 Gorilla Mux 是一个功能强大的第三方 路由器 ,支持命名参数提取。
package main import ( "fmt" "net/http" "github.com/gorilla/mux" ) func getUser(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) userID := vars["id"] userName := vars["name"] fmt.Fprintf(w, "User ID: %s, Name: %s", userID, userName) } func main() { r := mux.NewRouter() r.HandleFunc("/user/{id:[0-9]+}/{name}", getUser).Methods("GET") http.ListenAndServe(":8080", r) }
上面代码中, {id:[0-9]+} 定义了一个只匹配数字的参数, {name} 匹配任意字符。通过 mux.Vars(r) 获取映射数据。 使用 Echo 框架简化参数读取 Echo 是轻量高性能的Web框架,内置对动态路由的良好支持。 立即学习 “ go语言免费学习笔记(深入) ”; Git 程序猿必备版本控制工具 下载
package main import ( "github.com/labstack/echo/v4" "net/http" ) func getUser(c echo.Context) error { userID := c.Param("id") name := c.Param("name") return c.String(http.StatusOK, fmt.Sprintf("ID: %s, Name: %s", userID, name)) } func main() { e := echo.New() e.GET("/users/:id/:name", getUser) e.Start(":8080") }
Echo 使用冒号前缀定义参数,如 :id ,调用 c.Param() 直接获取值,简洁直观。 基于 net/http 手动解析(无外部依赖) 如果不想引入第三方库,可以用正则或字符串处理模拟动态路由。
package main import ( "net/http" "regexp" "fmt" ) var userPattern = regexp.MustCompile(`^/user/(\d+)/([a-zA-Z]+)$`) func userHandler(w http.ResponseWriter, r *http.Request) { matches := userPattern.FindStringSubmatch(r.URL.Path) if len(matches) != 3 { http.NotFound(w, r) return } userID := matches[1] userName := matches[2] fmt.Fprintf(w, "User ID: %s, Name: %s", userID, userName) } func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { if r.URL.Path == "/" { fmt.Fprint(w, "Welcome!") } else { userHandler(w, r) } }) http.ListenAndServe(":8080", nil) }
利用 正则表达式 提取路径段,适合简单场景,但维护复杂路由时可读性较差。 基本上就这些。选择哪种方式取决于项目需求:追求轻便可选标准库+正则,注重开发效率推荐 Echo 或 Mux。关键在于清晰定义路径模式并正确提取参数。

相关文章