go 的 net/http 包提供开箱即用的 http 服务与客户端能力,基于 goroutine 实现高并发;支持快速启动服务器、自定义 handler、发起客户端请求,并需注意超时设置、连接复用等最佳实践。

Go 语言的 net/http 包提供了简洁、高效且开箱即用的 HTTP 服务与客户端能力,无需第三方依赖即可快速构建 Web 服务或发起 HTTP 请求。它底层基于 goroutine 和 channel 实现并发模型,天然支持高并发,同时 API 设计清晰,学习成本低。
快速启动一个 HTTP 服务器
使用 http.ListenAndServe 可在几行代码内启动一个 Web 服务器:
- 第一个参数是监听地址(如
":8080"表示监听本地所有 IP 的 8080 端口) - 第二个参数是
http.Handler接口实现,常用nil表示使用默认的http.DefaultServeMux - 路由注册通过
http.HandleFunc完成,它自动将路径与处理函数绑定到默认多路复用器
示例:
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
w.Write([]byte("Hello from Go!"))
})
log.Fatal(http.ListenAndServe(":8080", nil))
}自定义 Handler 实现更灵活的控制
当需要复用逻辑、封装状态或统一中间件时,可实现 http.Handler 接口(即定义 ServeHTTP(http.ResponseWriter, *http.Request) 方法):
立即学习“go语言免费学习笔记(深入)”;
随着电子商务模式更加多样化,企业和个人的迫切需求,PHPShops多用户商城系统正可以为其提供专业的电子商务解决方案。社区化电子商务,主要面向行业类和地方门户类站点。 PHPShops多用户商城系统(简称PHPShops)是基于电子商务的一套平台交易系统,它采用目前最流行网站建设工具PHP+MYSQL,实现模版分离技术,通过HTML交互式网页技术来实行客户端与服务器端的交流。无论在
- 结构体字段可用于携带配置、数据库连接等依赖
- 方法内可做权限校验、日志记录、请求解析等前置操作
- 避免过度依赖全局变量或闭包,提升可测试性
例如:
type Greeter struct {
prefix string
}func (g Greeter) ServeHTTP(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "%s, %s!", g.prefix, r.URL.Query().Get("name"))
}// 使用:http.ListenAndServe(":8080", Greeter{prefix: "Hi"})发起 HTTP 客户端请求
Go 提供了开箱即用的 http.Client,默认实例 http.DefaultClient 已配置合理超时和连接池:
- 简单 GET 请求可用
http.Get(url),适合快速调试 - 需要设置 Header、Body 或自定义超时,应创建新
http.Client实例 - 务必调用
resp.Body.Close()防止文件描述符泄漏 - 对 JSON 数据,推荐用
json.NewDecoder(resp.Body).Decode(&v)直接解析
示例:
client := &http.Client{
Timeout: 5 * time.Second,
}
resp, err := client.Get("https://httpbin.org/get")
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()var data map[string]interface{}
json.NewDecoder(resp.Body).Decode(&data)常见注意事项与最佳实践
实际开发中容易忽略但影响稳定性和可维护性的细节:
- 服务器未设置读写超时可能导致连接堆积,建议用
http.Server显式配置ReadTimeout、WriteTimeout - 客户端不重用
http.Client实例会绕过连接池,造成资源浪费和 TIME_WAIT 暴增 - 处理表单数据优先用
r.ParseForm()+r.FormValue("key"),而非手动解析r.Body - 静态文件服务可用
http.FileServer(http.Dir("./static")),配合http.StripPrefix正确映射路径









