Go 在标准库中内置了功能强大的
net/http
包,可快速构建高并发、高性能的 HTTP 服务,广泛应用于微服务、Web后端、API中间层等场景。
一、快速创建一个HTTP服务
示例:最简Hello服务
package main import ( "fmt" "net/http" ) func helloHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, Go Web!") } func main() { http.HandleFunc("/", helloHandler) fmt.Println("Listening on http://localhost:8080/") http.ListenAndServe(":8080", nil) }
二、请求与响应对象详解
- •
http.Request
:封装了客户端请求的所有信息(URL、Header、Body等) - •
http.ResponseWriter
:用于构造服务器的响应
示例:获取请求信息
func infoHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Method: %s\n", r.Method) fmt.Fprintf(w, "URL: %s\n", r.URL.Path) fmt.Fprintf(w, "Header: %v\n", r.Header) }
三、处理URL参数与POST数据
1. 获取查询参数
func queryHandler(w http.ResponseWriter, r *http.Request) { name := r.URL.Query().Get("name") fmt.Fprintf(w, "Hello, %s!", name) }
访问:http://localhost:8080/query?name=Go
2. 处理表单数据(POST)
func formHandler(w http.ResponseWriter, r *http.Request) { r.ParseForm() username := r.FormValue("username") fmt.Fprintf(w, "Welcome, %s!", username) }
四、自定义HTTP路由与Handler
使用 http.ServeMux
func main() { mux := http.NewServeMux() mux.HandleFunc("/hello", helloHandler) mux.HandleFunc("/info", infoHandler) http.ListenAndServe(":8080", mux) }
使用第三方路由器(如 gorilla/mux
、chi
等)
// 示例略,可根据需要引入第三方库
五、构建HTTP客户端请求
Go 提供了强大的 http.Client
支持 GET/POST 等请求。
示例:GET请求
resp, err := http.Get("https://httpbin.org/get") defer resp.Body.Close() body, _ := io.ReadAll(resp.Body) fmt.Println(string(body))
示例:POST请求
data := url.Values{"name": {"Go"}} resp, err := http.PostForm("https://httpbin.org/post", data) defer resp.Body.Close()
六、JSON接口的处理
JSON响应
func jsonHandler(w http.ResponseWriter, r *http.Request) { type Resp struct { Status string `json:"status"` } w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(Resp{"ok"}) }
JSON请求解析
func receiveJSON(w http.ResponseWriter, r *http.Request) { type Req struct { Name string `json:"name"` } var data Req json.NewDecoder(r.Body).Decode(&data) fmt.Fprintf(w, "Hello, %s", data.Name) }
七、静态文件服务
http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("public"))))
访问 /static/index.html
实际读取 public/index.html
文件。
八、HTTP中间件的编写
中间件常用于实现日志、认证、限流等功能。
func loggingMiddleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { log.Printf("Request: %s %s", r.Method, r.URL.Path) next.ServeHTTP(w, r) }) }
九、启动HTTPS服务(SSL)
http.ListenAndServeTLS(":443", "cert.pem", "key.pem", nil)
用于生产环境时,请使用自动证书工具如 Let’s Encrypt + Caddy/Nginx 做代理。
十、总结
能力 | 工具与API |
启动Web服务 | http.ListenAndServe |
构造REST接口 | HandlerFunc + JSON 编解码 |
发起HTTP请求 | http.Get , http.Post , http.Client |
路由与中间件 | ServeMux 或第三方路由器 |
文件服务与HTTPS | http.FileServer / ListenAndServeTLS |