全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

如何使用Golang实现RESTful API_使用net/http和JSON解析构建接口

用Go标准库实现RESTful API的关键是:定义带json标签的导出结构体解析请求,用ServeMux结合路径截取模拟REST路由,封装writeJSON/writeError统一响应,最后通过http.ListenAndServe启动服务。

用 Go 的 net/http 和标准库 encoding/json 实现 RESTful API 并不复杂,关键在于合理组织路由、正确处理请求/响应、统一错误反馈,以及保持代码可读和可维护。

定义结构体并绑定 JSON 请求

Go 中解析 JSON 请求体最常用方式是通过结构体标签(json:)映射字段。注意导出字段(首字母大写)才能被 JSON 包访问。

例如用户注册接口需要接收 JSON:

type UserCreateRequest struct {
    Name  string `json:"name"`
    Email string `json:"email"`
    Age   int    `json:"age"`
}

在 handler 中解析:

func createUser(w http.ResponseWriter, r *http.Request) {
    var req UserCreateRequest
    if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
        http.Error(w, "Invalid JSON", http.StatusBadRequest)
        return
    }
    // 处理业务逻辑,比如存入内存或数据库
    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(map[string]string{"status": "created"})
}

用 ServeMux 或自定义路由实现 REST 风格

net/http.ServeMux 支持基础路径匹配,适合小型 API。RESTful 路由建议按资源设计,如 /users/users/{id}

  • GET /users → 列出所有用户
  • POST /users → 创建用户
  • GET /users/123 → 获取 ID 为 123 的用户
  • PUT /users/123 → 更新用户
  • DELETE /users/123 → 删除用户

由于 ServeMux 不支持路径参数(如 {id}),可用简单字符串截取或升级为轻量路由器(如 gorilla/mux)。但纯 net/http 也能应付:

http.HandleFunc("/users/", func(w http.ResponseWriter, r *http.Request) {
    parts := strings.Split(r.URL.Path, "/")
    if len(parts) < 3 {
        http.Error(w, "Bad path", http.StatusBadRequest)
        return
    }
    id := parts[2]
    switch r.Method {
    case "GET":
        getUserByID(w, r, id)
    case "PUT":
        updateUserByID(w, r, id)
    case "DELETE":
        deleteUserByID(w, r, id)
    default:
        http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
    }
})

统一响应格式与错误处理

避免每个 handler 都手动设 header 和状态码。封装一个响应工具函数更清晰:

func writeJSON(w http.ResponseWriter, status int, v interface{}) {
    w.Header().Set("Content-Type", "application/json")
    w.WriteHeader(status)
    json.NewEncoder(w).Encode(v)
}

func writeError(w http.ResponseWriter, msg string, status int) {
    writeJSON(w, status, map[string]string{"error": msg})
}

使用示例:

if req.Name == "" {
    writeError(w, "name is required", http.StatusBadRequest)
    return
}

启动服务并监听端口

最后启动 HTTP 服务,建议加日志和基本 panic 恢复(生产环境推荐用 http.Server 配置超时等):

func main() {
    http.HandleFunc("/users", listUsers)
    http.HandleFunc("/users/", func(w http.ResponseWriter, r *http.Request) {
        // 如上路由分发逻辑
    })

    fmt.Println("Server starting on :8080")
    if err := http.ListenAndServe(":8080", nil); err != nil {
        log.Fatal(err)
    }
}

运行后即可用 curl 测试:

curl -X POST http://localhost:8080/users \
  -H "Content-Type: application/json" \
  -d '{"name":"Alice","email":"alice@example.com","age":30}'

基本上就这些。不用框架也能写出干净、符合 REST 原则的 API,重点是结构体映射准确、路由逻辑清晰、错误反馈及时——其余就是 Go 本身简洁有力的风格在起作用。


# js  # json  # go  # golang  # app  # 路由器  # 端口  # 工具  # usb  # curl  # ai  # switch  # 路由  # 状态码  # restful  # 封装 


相关文章: 网站制作免费,什么网站能看正片电影?  建站之星伪静态规则如何正确配置?  武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?  零服务器AI建站解决方案:快速部署与云端平台低成本实践  如何高效利用200m空间完成建站?  如何在腾讯云服务器快速搭建个人网站?  建站之星如何实现PC+手机+微信网站五合一建站?  建站之星与建站宝盒如何选择最佳方案?  IOS倒计时设置UIButton标题title的抖动问题  网站图片在线制作软件,怎么在图片上做链接?  淘宝制作网站有哪些,淘宝网官网主页?  已有域名如何快速搭建专属网站?  高防服务器租用首荐平台,企业级优惠套餐快速部署  山东云建站价格为何差异显著?  定制建站方案优化指南:企业官网开发与建站费用解析  单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?  如何选择域名并搭建高效网站?  学校为何禁止电信移动建设网站?  Android使用GridView实现日历的简单功能  如何选择适配移动端的WAP自助建站平台?  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  建站之星代理费用多少?最新价格详情介绍  如何挑选高效建站主机与优质域名?  如何制作算命网站,怎么注册算命网站?  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  股票网站制作软件,网上股票怎么开户?  如何选择网络建站服务器?高效建站必看指南  建站之星安装后界面空白如何解决?  小型网站建站如何选择虚拟主机?  如何设置并定期更换建站之星安全管理员密码?  已有域名和空间如何快速搭建网站?  高性价比服务器租赁——企业级配置与24小时运维服务  建站OpenVZ教程与优化策略:配置指南与性能提升  娃派WAP自助建站:免费模板+移动优化,快速打造专业网站  制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?  如何用已有域名快速搭建网站?  宁波免费建站如何选择可靠模板与平台?  上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?  建站10G流量真的够用吗?如何应对访问高峰?  如何自定义建站之星模板颜色并下载新样式?  如何快速配置高效服务器建站软件?  香港服务器WordPress建站指南:SEO优化与高效部署策略  如何优化Golang Web性能_Golang HTTP服务器性能提升方法  如何快速选择适合个人网站的云服务器配置?  实例解析Array和String方法  建站之星后台管理:高效配置与模板优化提升用户体验  视频网站app制作软件,有什么好的视频聊天网站或者软件?  如何确认建站备案号应放置的具体位置?  如何挑选最适合建站的高性能VPS主机?  建站之星好吗?新手能否轻松上手建站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。