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 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 获取单个用户的接口。

设置路由分发

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 编码错误处理。