引言:为什么 Go 是构建 REST API 的理想选择?
Go(Golang)是 Google 开发的一种现代编译型编程语言。它融合了 C++ 的高性能与 Python 的简洁性。如果你需要快速编写 REST API,Go 是最佳选择之一。在本文中,我们将在 30 分钟内仅使用标准库 net/http 创建一个功能完备的 Go REST API。你将看到处理 HTTP 请求、路由以及返回 JSON 响应是多么简单。
文章结束时,你将能够编写自己的 API 并将其部署到服务器上。我们不会使用任何第三方框架——仅使用纯 Go 编写,这使得代码轻量且高效。
第一步:安装 Go 并创建项目
安装 Go
如果你尚未安装 Go,请从官方网站下载最新版本。按照你的操作系统指引进行安装。安装完成后,在终端中检查版本:
go version你应该会看到类似 go version go1.22.0 linux/amd64 的输出。
创建项目
为项目创建一个新目录并初始化 Go 模块:
mkdir go-rest-apicd go-rest-apigo mod init go-rest-api现在项目结构已准备就绪。为了保持示例简洁,我们将所有代码编写在单个文件 main.go 中。
第二步:Go 中的简单 HTTP 服务器
让我们从一个基础的 HTTP 服务器开始。打开 main.go 文件并添加以下代码:
package main
import ( "fmt" "log" "net/http")
func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "你好,Go REST API!") })
log.Println("服务器已在端口 8080 启动") log.Fatal(http.ListenAndServe(":8080", nil))}使用命令 go run main.go 启动服务器,并在浏览器中打开 http://localhost:8080。你将看到一条欢迎消息。恭喜——你的第一个 Go HTTP 服务器已经运行起来了!
代码解析
http.HandleFunc—— 为 "/" 路由注册一个处理函数。http.ListenAndServe—— 在端口 8080 上启动服务器。log.Fatal—— 如果服务器启动失败则打印错误。
第三步:添加路由和 JSON 处理
现在让我们添加 REST 风格的支持:GET、POST、PUT、DELETE。我们将创建一个简单的内存型"数据库"(一个结构体切片)来管理任务列表(待办事项列表)。
数据结构
将 Task 结构体描述和一个全局切片添加到 main.go 中:
type Task struct { ID int `json:"id"` Name string `json:"name"`}
var tasks []Taskvar nextID int = 1路由处理函数
让我们创建一个主处理函数,用于分析 HTTP 方法并调用相应的功能函数:
func tasksHandler(w http.ResponseWriter, r *http.Request) { switch r.Method { case http.MethodGet: getTasks(w, r) case http.MethodPost: createTask(w, r) default: http.Error(w, "不允许的方法", http.StatusMethodNotAllowed) }}
func taskHandler(w http.ResponseWriter, r *http.Request) { // 从 URL 中提取 ID idStr := strings.TrimPrefix(r.URL.Path, "/tasks/") id, err := strconv.Atoi(idStr) if err != nil { http.Error(w, "无效的任务 ID", http.StatusBadRequest) return }
switch r.Method { case http.MethodGet: getTask(w, r, id) case http.MethodPut: updateTask(w, r, id) case http.MethodDelete: deleteTask(w, r, id) default: http.Error(w, "不允许的方法", http.StatusMethodNotAllowed) }}