使用gorilla/mux可构建灵活路由,支持参数解析、HTTP方法限制、子路由及自定义匹配。通过r.NotFoundHandler可处理404错误,结合httptest可进行路由测试。

使用
gorilla/mux
gorilla/mux
解决方案
安装 gorilla/mux
立即学习“go语言免费学习笔记(深入)”;
首先,你需要获取
gorilla/mux
go get github.com/gorilla/mux
基本路由:
package main
import (
"fmt"
"log"
"net/http"
"github.com/gorilla/mux"
)
func homeHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Welcome Home!")
}
func main() {
r := mux.NewRouter()
r.HandleFunc("/", homeHandler)
log.Fatal(http.ListenAndServe(":8080", r))
}这段代码创建了一个新的
mux.Router
/
homeHandler
带参数的路由:
gorilla/mux
func articleHandler(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
articleID := vars["id"]
fmt.Fprintf(w, "Article ID: %s\n", articleID)
}
func main() {
r := mux.NewRouter()
r.HandleFunc("/articles/{id}", articleHandler)
log.Fatal(http.ListenAndServe(":8080", r))
}在这里,
{id}mux.Vars(r)
HTTP 方法限制:
你可以限制路由只响应特定的 HTTP 方法。
大部分的工资还是以打印工资条的形式进行,偶有公司使用邮件发放工资条,而工资条的现代形式应该是移动工资条,以实现信息的备忘、到达、管理、对帐、环保、高效等需求……,用户已经习惯使用手机(或以其它移动方式)实现一切需求,应用的移动化是大势所趋。工资查查就在这样的背景下诞生,北京亦卓科技于2017的开发并推出了微信小程序工资查查。由于对有用户对数据隐私与安全性的考虑,北京亦卓科技在推出了云端应用--工资
0
func createHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Creating a new resource...")
}
func main() {
r := mux.NewRouter()
r.HandleFunc("/resources", createHandler).Methods("POST")
log.Fatal(http.ListenAndServe(":8080", r))
}这个路由只会在收到
POST
使用子路由:
子路由允许你创建更复杂的路由结构。
func productsHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "All products...")
}
func productHandler(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
productID := vars["id"]
fmt.Fprintf(w, "Product ID: %s\n", productID)
}
func main() {
r := mux.NewRouter()
productsRouter := r.PathPrefix("/products").Subrouter()
productsRouter.HandleFunc("/", productsHandler)
productsRouter.HandleFunc("/{id}", productHandler)
log.Fatal(http.ListenAndServe(":8080", r))
}所有以
/products
productsRouter
如何处理 gorilla/mux
当
gorilla/mux
NotFoundHandler
func notFoundHandler(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusNotFound)
fmt.Fprintln(w, "Custom 404 - Page not found!")
}
func main() {
r := mux.NewRouter()
r.HandleFunc("/", homeHandler)
r.NotFoundHandler = http.HandlerFunc(notFoundHandler)
log.Fatal(http.ListenAndServe(":8080", r))
}通过设置
r.NotFoundHandler
gorilla/mux
除了基本的路由功能,
gorilla/mux
gorilla/mux
如何测试 gorilla/mux
测试路由是确保你的应用正常工作的重要部分。你可以使用
net/http/httptest
import (
"net/http"
"net/http/httptest"
"testing"
"github.com/gorilla/mux"
)
func TestHomeHandler(t *testing.T) {
r := mux.NewRouter()
r.HandleFunc("/", homeHandler)
req, err := http.NewRequest("GET", "/", nil)
if err != nil {
t.Fatal(err)
}
rr := httptest.NewRecorder()
r.ServeHTTP(rr, req)
if status := rr.Code; status != http.StatusOK {
t.Errorf("handler returned wrong status code: got %v want %v",
status, http.StatusOK)
}
expected := "Welcome Home!\n"
if rr.Body.String() != expected {
t.Errorf("handler returned unexpected body: got %v want %v",
rr.Body.String(), expected)
}
}这个例子展示了如何创建一个模拟的 HTTP 请求,然后使用
r.ServeHTTP
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号