新闻中心
Golang 如何开发一个简易 REST API 服务_Golang HTTP 路由与控制器项目
使用 net/http 实现 REST API,通过路由分发请求至控制器处理。1. 定义 User 模型用于 JSON 序列化;2. 在 controllers 中实现 GetUsers 和 GetUserByID 处理函数,返回内存用户数据;3. routes/router.go 注册路径路由;4. main.go 启动服务并监听 8080 端口。访问 /users 可获取用户列表。后续可引入 mux 路由、中间件、数据库等增强功能。

用 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 controllersimport (
"en
coding/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
一个AI驱动的视频开发平台,专为忙碌的企业家和销售团队打造
142
查看详情
设置路由分发
在 routes/router.go 中注册路由:
package routesimport ( "net/http" "your-project/controllers" )
func SetupRoutes() { http.HandleFunc("/users", controllers.GetUsers) http.HandleFunc("/users/", controllers.GetUserByID) // 注意尾部斜杠匹配 }
使用标准库的 http.HandleFunc 注册路径与处理函数的映射。注意路径顺序,更具体的应放在后面避免覆盖。
启动主服务
在 main.go 中导入并启动路由:
package mainimport ( "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/mux 或 chi 增强路由功能(如路径参数、方法限制)
- 加入中间件处理日志、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为例及内存管理策略


2025-11-15
浏览次数:次
返回列表