使用 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 风格划分:
示例目录结构:
rest-api/
├── main.go
├── routes/
│ └── router.go
├── controllers/
│ └── user_controller.go
└── models/
└── user.go
在 models/user.go 中定义一个简单的用户结构体:
立即学习“go语言免费学习笔记(深入)”;
type User struct {这是一个用于 JSON 序列化的基础模型。
在 controllers/user_controller.go 中实现几个简单的 REST 接口:
package controllersimport ( "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 获取单个用户的接口。
在 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 标准库,无需引入第三方框架。适合学习或小型项目。后续可改进点包括:
基本上就这些,不复杂但容易忽略细节,比如 Header 设置和 JSON 编码错误处理。
以上就是Golang 如何开发一个简易 REST API 服务_Golang HTTP 路由与控制器项目的详细内容,更多请关注php中文网其它相关文章!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号