如何使用Golang构建Web服务器_使用net/http创建基础Web服务

Go 的 net/http 包可快速启动轻量 Web 服务器:几行代码调用 http.HandleFunc 和 http.ListenAndServe 即可上线;支持手动判断 r.Method 实现方法路由,用 r.URL.Query()、r.FormValue() 和 json.Decode() 处理各类请求数据;通过 w.WriteHeader() 和 w.Header().Set() 精确控制响应状态码与 Header。

用 Go 的 net/http 包启动一个 Web 服务器非常简单,几行代码就能跑起来,适合快速验证逻辑、搭建 API 或静态服务。

基础 HTTP 服务器:几行代码就上线

Go 标准库自带的 net/http 不需要额外安装,直接导入即可。最简服务只需调用 http.ListenAndServe,并注册一个处理函数:

  • 使用 http.HandleFunc 注册路径和响应逻辑(比如 "/" 对应首页)
  • http.ListenAndServe(":8080", nil) 启动服务,监听本地 8080 端口
  • 处理函数接收 http.ResponseWriter*http.Request,通过 w.Write([]byte(...)) 返回内容

示例:

func main() {
  http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    w.WriteHeader(200)
    w.Write([]byte("Hello from Go!"))
  })
  log.Println("Server starting on :8080")
  http.ListenAndServe(":8080", nil)
}

路由进阶:区分方法与路径

net/http 默认不区分 HTTP 方法(GET/POST),需手动判断 r.Method

  • 在处理函数中用 if r.Method == "POST" 分支处理不同请求类型
  • r.URL.Path 获取访问路径,实现简易路由(如 /api/users
  • 对不支持的方法返回 http.StatusMethodNotAllowed(405)更规范

读取请求数据:表单、查询参数与 JSON

根据客户端传参方式选择对应方法:

  • r.URL.Query().Get("key") 读取 URL 查询参数(如 ?name=alice
  • r.FormValue("field") 自动解析 application/x-www-form-urlencoded 或 multipart 表单
  • 读 JSON:先 r.ParseBody()(可选),再用 json.NewDecoder(r.Body).Decode(&v)

返回结构化响应:设置状态码与 Header

别只依赖默认 200,合理使用状态码和 Header 提升健壮性:

  • w.WriteHeader(http.StatusNotFound) 明确返回 404
  • 设置 JSON 响应:w.Header().Set("Content-Type", "application/json")
  • 写入 JSON 数据:json.NewEncoder(w).Encode(map[string]string{"msg": "ok"})

基本上就这些。不需要框架也能写出清晰、可控的 HTTP 服务,net/http 足够轻量又足够可靠。