1. 路由基础
在 Go 中,可以使用 net/http
包来设置基本的路由。可以通过 http.HandleFunc
注册 URL 路径和处理函数,从而实现不同路径的请求处理。
基本路由示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| package main
import ( "fmt" "net/http" )
func helloHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, World!") }
func main() { http.HandleFunc("/", helloHandler) fmt.Println("服务器启动,监听端口 8080") http.ListenAndServe(":8080", nil) }
|
在上面的代码中,/
路径会匹配所有的请求,并执行 helloHandler
函数的处理逻辑。
2. HTTP 请求路由
为了实现更加复杂的路由和请求处理,可以使用一些 HTTP 路由库,如 gorilla/mux
,它允许我们设置参数化路径、正则匹配等高级功能。
使用 gorilla/mux
路由库
安装 gorilla/mux
路由库:
1
| go get -u github.com/gorilla/mux
|
gorilla/mux
示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| package main
import ( "fmt" "github.com/gorilla/mux" "net/http" )
func main() { r := mux.NewRouter() r.HandleFunc("/users/{id}", userHandler).Methods("GET") r.HandleFunc("/products/{category}/{id:[0-9]+}", productHandler).Methods("GET")
fmt.Println("服务器启动,监听端口 8080") http.ListenAndServe(":8080", r) }
func userHandler(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) id := vars["id"] fmt.Fprintf(w, "用户ID: %s", id) }
func productHandler(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) category := vars["category"] id := vars["id"] fmt.Fprintf(w, "分类: %s, 产品ID: %s", category, id) }
|
在上述示例中,mux
库允许我们使用动态路由,例如用户 ID 和产品分类,方便管理多种 API 路由。
3. 多路复用(Multiplexing)
在网络编程中,多路复用用于管理和调度多个 I/O 操作。Go 标准库的 net/http
包自带了基本的多路复用功能,允许我们在一个服务器上处理多种请求类型。
Go 中的多路复用
net/http
包自动处理多路复用,它会为每个连接创建一个 goroutine,从而实现并发处理请求。例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| package main
import ( "fmt" "net/http" )
func homeHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "欢迎来到首页!") }
func aboutHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "关于我们页面") }
func main() { http.HandleFunc("/", homeHandler) http.HandleFunc("/about", aboutHandler)
fmt.Println("服务器启动,监听端口 8080") http.ListenAndServe(":8080", nil) }
|
在上述代码中,http.HandleFunc
处理多个路由,net/http
包会自动对请求进行多路复用。
4. 其他高级路由和多路复用库
- Gin:一个轻量级的 HTTP web 框架,带有内置的路由和多路复用功能。
- httprouter:一个高性能路由库,支持高效的 URL 路径匹配。
使用 Gin 框架
安装 Gin:
1
| go get -u github.com/gin-gonic/gin
|
Gin 示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| package main
import ( "github.com/gin-gonic/gin" )
func main() { router := gin.Default() router.GET("/ping", func(c *gin.Context) { c.JSON(200, gin.H{ "message": "pong", }) }) router.Run(":8080") }
|
Gin 提供了更多功能和优化,适合构建高效的 Web API 服务。