ZBLOG

Router.HandleFunc

在 Go 语言中,Router.HandleFunc 是用于注册 HTTP 路由和处理函数的常见方法(通常来自 net/http 或第三方库如 gorilla/mux)。以下是详细说明和示例:


1. 标准库 net/http 的用法

package main

import (
	"net/http"
)

func helloHandler(w http.ResponseWriter, r *http.Request) {
	w.Write([]byte("Hello, World!"))
}

func main() {
	// 创建路由器
	router := http.NewServeMux()

	// 注册路由和处理函数
	router.HandleFunc("/hello", helloHandler)

	// 启动服务器
	http.ListenAndServe(":8080", router)
}
  • 作用:将路径 /hello 绑定到 helloHandler 函数。
  • 特点
    • 内置标准库,无需额外依赖。
    • 仅支持基于路径的匹配,不支持动态路由、正则表达式等高级特性。

2. 第三方库 gorilla/mux 的用法

package main

import (
	"net/http"
	"github.com/gorilla/mux"
)

func userHandler(w http.ResponseWriter, r *http.Request) {
	vars := mux.Vars(r)
	w.Write([]byte("User ID: " + vars["id"]))
}

func main() {
	r := mux.NewRouter()

	// 注册路由(支持动态参数)
	r.HandleFunc("/users/{id:[0-9]+}", userHandler)

	http.ListenAndServe(":8080", r)
}
  • 优势
    • 动态路由:如 /users/{id},支持正则约束(如 {id:[0-9]+})。
    • HTTP方法匹配:可通过 Methods("GET") 指定请求方法。
  • 安装
go get github.com/gorilla/mux@v1.8.0

3. Gin框架的类似实现

若使用高性能框架 Gin,对应的方法是 router.GET/POST

package main

import (
	"github.com/gin-gonic/gin"
)

func main() {
	r := gin.Default()
	r.GET("/hello", func(c *gin.Context) {
		c.String(200, "Hello, Gin!")
	})
	r.Run(":8080")
}

关键区别

Feature net/http gorilla/mux Gin
动态路由
HTTP方法过滤
性能 ⭐⭐ ⭐⭐ ⭐⭐⭐⭐
中间件支持

常见问题

  1. 如何获取查询参数? “`go // net/http id := r.URL.Query().Get(“id”)

// gorilla/mux (路径参数) vars := mux.Vars® id := vars[“id”]


2. **如何添加中间件?**
   ```go
   // gorilla/mux
   r.Use(loggingMiddleware)
  1. 如何匹配所有路径?
    
    r.PathPrefix("/").HandlerFunc(catchAllHandler)
    

如果需要更复杂的路由功能(如分组、中间件链),推荐使用 Gin、Echo 或 Fiber。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=23958

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?