Go语言通过net/http包实现HTTP路由与多方法请求处理,使用HandleFunc注册路径与处理函数映射;2. 在处理函数中通过r.Method判断GET、POST等请求类型并执行对应逻辑;3. 路径参数可通过前缀匹配和字符串截取提取,查询参数用r.URL.Query()获取;4. 静态文件服务借助http.FileServer和http.StripPrefix提供;5. 标准库适用于轻量级场景,复杂需求可选用Gin、Echo等框架,但需先掌握原生机制。

在Go语言中,HTTP路由和多路请求处理是构建Web服务的核心部分。Go标准库net/http提供了简洁而强大的机制来注册路由和处理不同类型的HTTP请求。下面通过一个具体示例,展示如何使用原生方式实现HTTP路由与GET、POST等多方法请求处理。
Go的http.HandleFunc或http.Handle可用于注册URL路径与处理函数的映射关系。HandleFunc接收路径和函数作为参数,将请求交给指定函数处理。
package main
import (
"fmt"
"net/http"
)
func homeHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "欢迎访问首页")
}
func main() {
http.HandleFunc("/", homeHandler)
fmt.Println("服务器启动在 :8080")
http.ListenAndServe(":8080", nil)
}
同一个路径可能需要支持多种HTTP方法(如GET获取数据,POST提交数据)。可以在处理函数内部通过r.Method判断请求类型,分别执行逻辑。
func userHandler(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case "GET":
fmt.Fprintf(w, "获取用户信息")
case "POST":
fmt.Fprintf(w, "创建新用户")
default:
http.Error(w, "不支持的请求方法", http.StatusMethodNotAllowed)
}
}
func main() {
http.HandleFunc("/user", userHandler)
http.ListenAndServe(":8080", nil)
}
虽然标准库不直接支持动态路径(如/user/123),但可通过前缀匹配结合字符串解析实现简单参数提取。查询参数则可通过r.URL.Query()获取。
立即学习“go语言免费学习笔记(深入)”;
func postHandler(w http.ResponseWriter, r *http.Request) {
// 模拟 /post/123 形式的路径
if len(r.URL.Path) > 6 {
id := r.URL.Path[6:] // 提取ID
query := r.URL.Query().Get("type") // 获取查询参数
fmt.Fprintf(w, "文章ID: %s, 类型: %s", id, query)
} else {
fmt.Fprintf(w, "请提供文章ID")
}
}
func main() {
http.HandleFunc("/post/", postHandler) // 注意结尾斜杠表示前缀匹配
http.ListenAndServe(":8080", nil)
}
使用http.FileServer可以轻松提供静态资源,比如HTML、CSS、JS文件。
func main() {
// 注册API路由
http.HandleFunc("/api/health", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "OK")
})
// 提供静态文件
fs := http.FileServer(http.Dir("./static/"))
http.Handle("/static/", http.StripPrefix("/static/", fs))
http.ListenAndServe(":8080", nil)
}
基本上就这些。Go原生的net/http包足够应对大多数轻量级Web场景。对于更复杂的路由需求(如通配符、中间件、分组路由),可考虑使用Gin、Echo等第三方框架,但理解标准库的机制是基础。结构清晰、逻辑明确才是稳定服务的关键。
以上就是GolangHTTP路由与多路请求处理示例的详细内容,更多请关注php中文网其它相关文章!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号