登录
首页 >  Golang >  Go教程

Golang实现RESTfulAPI及请求处理方法

时间:2026-01-08 10:54:42 157浏览 收藏

各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题《Golang实现RESTful API及请求处理方法》,很明显是关于Golang的文章哈哈哈,其中内容主要会涉及到等等,如果能帮到你,觉得很不错的话,欢迎各位多多点评和分享!

net/http 可构建轻量 REST 服务:需手动精确匹配路径、解析 URL 参数、一次性读取 Body、导出结构体字段并加 json tag、校验 Content-Type、用 http.Error 或封装函数返回错误、显式处理 OPTIONS 预检并设置 CORS 头。

如何使用Golang实现RESTful API_Golang REST接口设计与请求处理方法

net/http 启动最简 REST 服务,别急着上框架

Go 原生 net/http 完全够用,尤其在中小规模 API 场景。过早引入 ginecho 反而掩盖路由匹配、中间件执行顺序等关键细节。

  • http.HandleFunc 注册路径时,前缀匹配是隐式的:注册 /api/users 会同时响应 /api/users/123 —— 需手动检查 r.URL.Path 是否精确匹配
  • 使用 http.ServeMux 自定义路由时,注意它不支持路径参数(如 /users/{id}),必须自己解析 r.URL.Path 并提取 id
  • 启动服务务必显式指定端口和错误处理:
    if err := http.ListenAndServe(":8080", nil); err != nil && err != http.ErrServerClosed {
        log.Fatal(err)
    }

正确解析 JSON 请求体,避免 io.EOF 和空结构体

常见错误是直接对 http.Request.Body 多次调用 json.Unmarshal —— Body 是单次读取流,第二次读就会返回 io.EOF

  • 始终用 io.ReadAll(r.Body) 一次性读完,再传给 json.Unmarshal;不要试图复用 r.Body
  • 结构体字段必须首字母大写且带 json tag,否则反序列化后字段为空:type User struct { Name string `json:"name"` }
  • r.Header.Get("Content-Type") 检查是否为 application/json,非 JSON 请求应返回 415 Unsupported Media Type

http.Error 统一返回错误,别拼接字符串

手写 w.WriteHeader(400); w.Write([]byte(`{"error":"xxx"}`)) 容易遗漏状态码、Content-Type 或格式不一致。

  • 优先用 http.Error(w, "bad request", http.StatusBadRequest),它自动设状态码和 text/plain 类型
  • 若需返回 JSON 错误,单独封装函数:
    func writeJSONError(w http.ResponseWriter, msg string, code int) {
        w.Header().Set("Content-Type", "application/json")
        w.WriteHeader(code)
        json.NewEncoder(w).Encode(map[string]string{"error": msg})
    }
  • 注意 http.Error 不会终止 handler 执行,后续代码仍会运行,必要时加 return

处理 CORS 时,OPTIONS 预检请求必须显式响应

浏览器发跨域请求前会先发 OPTIONS,如果没处理,前端卡在 pending 状态,控制台只显示 “CORS error”。

  • 在 handler 开头判断:if r.Method == "OPTIONS" { w.WriteHeader(http.StatusOK); return }
  • 必须设置以下响应头:Access-Control-Allow-OriginAccess-Control-Allow-MethodsAccess-Control-Allow-Headers
  • 如果允许携带 cookie,还需加 Access-Control-Allow-Credentials: true,且 Allow-Origin 不能为 *
实际项目里,最难调试的往往是预检失败和 Body 重复读取——这两个点没踩过坑的人,多半还没真正跑通第一个 POST 接口。

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《Golang实现RESTfulAPI及请求处理方法》文章吧,也可关注golang学习网公众号了解相关技术文章。

前往漫画官网入口并下载 ➜
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>