新闻中心

Golang 如何开发一个简易 REST API 服务_Golang HTTP 路由与控制器项目

2025-11-15
浏览次数:
返回列表
使用 net/http 实现 REST API,通过路由分发请求至控制器处理。1. 定义 User 模型用于 JSON 序列化;2. 在 controllers 中实现 GetUsers 和 GetUserByID 处理函数,返回内存用户数据;3. routes/router.go 注册路径路由;4. main.go 启动服务并监听 8080 端口。访问 /users 可获取用户列表。后续可引入 mux 路由、中间件、数据库等增强功能。

golang 如何开发一个简易 rest api 服务_golang http 路由与控制器项目

用 Golang 开发一个简易的 REST API 服务并不复杂,核心是使用标准库 net/http 搭建 HTTP 服务,结合路由分发请求到对应的控制器处理。下面一步步说明如何组织一个结构清晰、可扩展的简易项目。

初始化项目结构

先创建项目目录,建议采用简单的 MVC 风格划分:

  • main.go - 程序入口,启动 HTTP 服务
  • routes/ - 路由定义
  • controllers/ - 处理请求逻辑
  • models/ - 数据结构定义(可选)

示例目录结构:

rest-api/
├── main.go
├── routes/
│   └── router.go
├── controllers/
│   └── user_controller.go
└── models/
    └── user.go

定义数据模型

models/user.go 中定义一个简单的用户结构体:

type User struct {
  ID   int    `json:"id"`
  Name string `json:"name"`
  Email string `json:"email"`
}

这是一个用于 JSON 序列化的基础模型。

编写控制器逻辑

controllers/user_controller.go 中实现几个简单的 REST 接口:

package controllers

import (   "encoding/json"   "net/http" )

var users = []models.User{   {ID: 1, Name: "Alice", Email: "alice@example.com"},   {ID: 2, Name: "Bob", Email: "bob@example.com"}, }

func GetUsers(w http.ResponseWriter, r *http.Request) {   w.Header().Set("Content-Type", "application/json")   json.NewEncoder(w).Encode(users) }

func GetUserByID(w http.ResponseWriter, r *http.Request) {   id := r.URL.Path[len("/users/"):]

  for _, u := range users {     if strconv.Itoa(u.ID) == id {       w.Header().Set("Content-Type", "application/json")       json.NewEncoder(w).Encode(u)       return     }   }   http.Error(w, "User not found", http.StatusNotFound) }

这里实现了获取所有用户和根据 ID 获取单个用户的接口。

Reachout.ai Reachout.ai

一个AI驱动的视频开发平台,专为忙碌的企业家和销售团队打造

Reachout.ai 142 查看详情 Reachout.ai

设置路由分发

routes/router.go 中注册路由:

package routes

import (   "net/http"   "your-project/controllers" )

func SetupRoutes() {   http.HandleFunc("/users", controllers.GetUsers)   http.HandleFunc("/users/", controllers.GetUserByID) // 注意尾部斜杠匹配 }

使用标准库的 http.HandleFunc 注册路径与处理函数的映射。注意路径顺序,更具体的应放在后面避免覆盖。

启动主服务

main.go 中导入并启动路由:

package main

import (   "log"   "your-project/routes" )

func main() {   routes.SetupRoutes()

  log.Println("Server starting on :8080")   log.Fatal(http.ListenAndServe(":8080", nil)) }

运行后访问 http://localhost:8080/users 即可看到用户列表。

小结与优化建议

这个简易 REST API 使用了 Go 标准库,无需引入第三方框架。适合学习或小型项目。后续可改进点包括:

  • 使用 gorilla/muxchi 增强路由功能(如路径参数、方法限制)
  • 加入中间件处理日志、CORS、认证等
  • 连接数据库替代内存变量
  • 添加错误统一返回格式

基本上就这些,不复杂但容易忽略细节,比如 Header 设置和 JSON 编码错误处理。

以上就是Golang 如何开发一个简易 REST API 服务_Golang HTTP 路由与控制器项目的详细内容,更多请关注其它相关文章!


# 几个  # 许昌seo外包招商  # 东莞环保seo优化推广  # 沧州网站定制推广平台电话  # 传媒网站建设项目  # 西昌网站排名优化  # 番禺抖音seo服务  # 优化网站首页  # 延庆区网站建设论坛  # 四川百度网站优化公司  # 流量帮SEO  # 相关文章  # 这是一个  # 如何在  # 放在  # 序列化  # js  # 资源管理  # 用户列表  # 数据结构  # 加载  # 标准库  # rest api  # 路由  # ai  # 端口  # app  # 编码  # golang  # go  # json 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: jQuery Mask 插件中实现电话号码固定前导零的教程  Pandas DataFrame 高效批量赋值:告别循环与笛卡尔积误区  利用5118提升短视频内容效果_5118短视频关键词优化方法  TikTok国际版网页端快速入口 TikTok全球版短视频浏览教程  优化HTML表单样式:解决输入框焦点跳动与元素间距问题  Win11截图该按哪些键 Win11截屏完整流程解析【教程】  Surface怎么安装系统 微软Surface Pro U盘重装win11教程  深入理解J*aScript中的B样条曲线与节点向量生成  在FastAPI中利用lifespan与依赖注入高效管理Redis连接池  德邦快递查询平台 德邦快递物流信息查询入口  谷歌学术网站直达地址 谷歌学术搜索网页版一键进入  文心一言怎样用批量生成做多版文案_文心一言用批量生成做多版文案【批量创作】  PHP中SSG-WSG API的AES加密实践:正确使用初始化向量  126邮箱网页版官方入口 126邮箱账号在线登录平台  抖音网页版快捷访问 抖音网页版网页版入口操作教程  Lar*el 8 多关键词数据库搜索优化实践  一加Ace 6T实拍样张首次公布!李杰:主摄实力完全看齐4K档性能旗舰  为什么简单的XML文件也会解析失败? 检查隐藏的非打印字符(如BOM)的方法  铁路12306卧铺选择攻略 铁路12306下铺座位预定技巧  必由学官网快捷入口 必由学网页版在线学习平台  uc浏览器网页版极速入口 uc网页浏览器网页版流畅体验  单射、满射与双射的关系 一文理清所有逻辑  QQ邮箱官方邮箱登录入口 QQ邮箱网页版快速访问  天眼查企业查询官网入口 天眼查官方网页版查询  移动端XML文件怎么转换成Excel 手机和平板上的解决方案  黑猫投诉统一入口官网 消费者权益保护投诉平台  React Router v6 教程:构建认证保护的私有路由与重定向策略  我的世界官方游戏入口 我的世界官网平台直达链接  CKEditor 5 自定义构建在React应用中渲染失败的调试与解决  漫蛙2在线漫画入口 漫蛙正版漫画网页版直达  BetterDiscord插件中安全更新用户简介的实践指南  Composer的 "licenses" 命令如何帮助你遵守开源协议_检查项目依赖的许可证合规性  虚幻5科幻题材ARPG大作遭取消!本是《奇异人生》厂商新作  抖音从哪里进入网页版_抖音官方入口链接  凉拌黄瓜怎么拌更入味 凉拌黄瓜简单家常做法  poki免费入口快捷访问 poki人气小游戏直接玩站点  Win10如何清理注册表垃圾 Win10注册表维护与优化指南【慎用】  QQ邮箱官方网页版登录 QQ邮箱个人邮箱快速访问  Golang如何优雅处理error_Golang error处理最佳实践总结  大象笔记网页版入口 印象笔记网页版登录入口  漫蛙2正版漫画站 漫蛙2网页版快速访问入口  Mac怎么查看崩溃日志_Mac控制台错误报告分析  Win10自动更新怎么关闭 Win10永久关闭系统更新的两种方法【终极版】  漫蛙漫画官方主页入口 漫蛙MANWA网页直达访问链接  内存检查:在VS Code中调试C++时的内存视图  Win10怎么设置静态IP地址 Win10手动配置IP地址步骤【指南】  sublime如何优雅地处理行尾空格_sublime自动清理多余空白字符配置  腾讯QQ邮箱官方网站_QQ邮箱网页版在线登录  天猫双十一预售商品怎么退款_天猫双十一预售退款操作指南  探索高级语言到C/C++的转译路径:以Go为例及内存管理策略 

搜索