30分钟内用Go编写REST API:分步指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为何Go语言是REST API的理想选择



Go(又称Golang)是Google开发的一种现代化编译型编程语言。它兼具C++的高性能和Python的简洁性,成为构建高负载Web服务与REST API的理想选择。与许多其他语言不同,Go原生支持HTTP服务器、多线程和快速编译。



在本教程中,我们将逐步创建一个功能完备的待办事项清单REST API。您将学到:

  • 如何在Go中搭建HTTP服务器
  • 如何处理JSON请求与响应
  • 如何实现CRUD操作(创建、读取、更新、删除)
  • 如何使用curl或Postman测试API


整个过程不超过30分钟。让我们开始吧!



1. 安装与项目初始化



在编写代码前,请确保已安装Go。可通过以下命令验证:

go version


若未安装Go,请从官方网站下载最新版本。



创建新项目目录并初始化模块:

mkdir go-rest-apicd go-rest-apigo mod init go-rest-api


创建文件main.go——所有代码将存放于此。为方便路由管理,我们将使用Go内置的标准库net/http。无需第三方依赖——这正是该语言的主要优势之一。



2. 定义数据结构与存储



首先定义数据模型。为简单起见,我们将任务存储在内存(切片)中而非数据库。创建Task结构体和全局ID计数器:



package main

import ( "encoding/json" "log" "net/http" "strconv" "strings" "sync")

// Task represents a tasktype Task struct { ID int `json:"id"` Title string `json:"title"` Done bool `json:"done"`}

// Task storage (in memory)var ( tasks []Task nextID int = 1 mu sync.Mutex)


注意sync.Mutex——由于Go服务器可能并发处理请求,需要它来保证线程安全的数据访问。



3. 实现CRUD操作



现在为每个HTTP方法编写主处理程序。我们将采用URL路由模式:

  • GET /tasks — 获取所有任务
  • POST /tasks — 创建新任务
  • GET /tasks/{id} — 根据ID获取任务
  • PUT /tasks/{id} — 更新任务
  • DELETE /tasks/{id} — 删除任务


3.1. 获取所有任务 (GET /tasks)

func getTasks(w http.ResponseWriter, r *http.Request) {    mu.Lock()    defer mu.Unlock()

w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(tasks)}


3.2. 创建任务 (POST /tasks)

func createTask(w http.ResponseWriter, r *http.Request) {    var newTask Task    if err := json.NewDecoder(r.Body).Decode(&newTask); err != nil {        http.Error(w, "Invalid JSON", http.StatusBadRequest)        return    }

mu.Lock() newTask.ID = nextID nextID++ tasks = append(tasks, newTask) mu.Unlock()

w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusCreated) json.NewEncoder(w).Encode(newTask)}


3.3. 根据ID获取、更新和删除

这些操作需要从URL中提取ID。标准Go库没有内置路径解析器,因此我们将编写一个简易工具:



                

博客

书籍推荐