登录
首页 >  Golang >  Go教程

Golang构建简单RESTful API教程

时间:2025-11-19 20:18:29 304浏览 收藏

本文详细介绍了如何使用 Golang 标准库快速构建一个简单的 RESTful API。无需第三方框架,即可实现对用户资源的增删改查(CRUD)操作。文章从项目结构、数据模型定义(`User` 结构体)、HTTP 处理函数(getUsers, getUser, createUser, updateUser, deleteUser)到主程序启动 HTTP 服务器,进行了全面讲解。通过 `http` 包的路由处理,轻松搭建 HTTP 服务。示例代码清晰易懂,非常适合 Golang 初学者学习 RESTful API 开发,或在小型项目中快速构建服务。最后,提供了 API 测试示例,方便读者验证功能。该教程旨在帮助开发者掌握使用 Golang 构建 RESTful API 的基础知识。

使用Golang标准库可快速构建RESTful API,通过定义User结构体实现增删改查功能,结合http包路由处理请求,无需第三方框架即可完成HTTP服务搭建。

Golang构建小型RESTful API服务示例

用Golang构建小型RESTful API服务非常高效,得益于其标准库的强大支持和简洁的语法。下面是一个使用Go标准库实现的简单RESTful API示例,提供对“用户”资源的增删改查(CRUD)操作。

项目结构

建议基础目录结构如下:
  • main.go – 程序入口
  • handlers.go – HTTP 请求处理函数
  • models.go – 数据结构定义

定义数据模型

models.go 中定义一个简单的 User 结构体:

package main

type User struct {
    ID   int    `json:"id"`
    Name string `json:"name"`
    Age  int    `json:"age"`
}

var users = []User{
    {ID: 1, Name: "Alice", Age: 25},
    {ID: 2, Name: "Bob", Age: 30},
}

编写HTTP处理函数

handlers.go 中实现REST接口逻辑:

package main

import (
    "encoding/json"
    "net/http"
    "strconv"
)

// 获取所有用户
func getUsers(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(users)
}

// 根据ID获取单个用户
func getUser(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    idStr := r.URL.Query().Get("id")
    id, err := strconv.Atoi(idStr)
    if err != nil {
        http.Error(w, "无效的ID", http.StatusBadRequest)
        return
    }

    for _, u := range users {
        if u.ID == id {
            json.NewEncoder(w).Encode(u)
            return
        }
    }
    http.Error(w, "用户未找到", http.StatusNotFound)
}

// 创建新用户
func createUser(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    var user User
    if err := json.NewDecoder(r.Body).Decode(&user); err != nil {
        http.Error(w, "请求体解析失败", http.StatusBadRequest)
        return
    }

    // 简单生成ID(生产环境应使用更安全的方式)
    user.ID = len(users) + 1
    users = append(users, user)
    w.WriteHeader(http.StatusCreated)
    json.NewEncoder(w).Encode(user)
}

// 更新用户信息
func updateUser(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    var updatedUser User
    if err := json.NewDecoder(r.Body).Decode(&updatedUser); err != nil {
        http.Error(w, "请求体解析失败", http.StatusBadRequest)
        return
    }

    for i, u := range users {
        if u.ID == updatedUser.ID {
            users[i] = updatedUser
            json.NewEncoder(w).Encode(updatedUser)
            return
        }
    }
    http.Error(w, "用户未找到", http.StatusNotFound)
}

// 删除用户
func deleteUser(w http.ResponseWriter, r *http.Request) {
    idStr := r.URL.Query().Get("id")
    id, err := strconv.Atoi(idStr)
    if err != nil {
        http.Error(w, "无效的ID", http.StatusBadRequest)
        return
    }

    for i, u := range users {
        if u.ID == id {
            users = append(users[:i], users[i+1:]...)
            w.WriteHeader(http.StatusNoContent)
            return
        }
    }
    http.Error(w, "用户未找到", http.StatusNotFound)
}

主程序启动HTTP服务器

main.go 中注册路由并启动服务:

package main

import "net/http"

func main() {
    http.HandleFunc("/users", func(w http.ResponseWriter, r *http.Request) {
        switch r.Method {
        case "GET":
            getUsers(w, r)
        case "POST":
            createUser(w, r)
        default:
            http.Error(w, "不支持的方法", http.StatusMethodNotAllowed)
        }
    })

    http.HandleFunc("/user", func(w http.ResponseWriter, r *http.Request) {
        switch r.Method {
        case "GET":
            getUser(w, r)
        case "PUT":
            updateUser(w, r)
        case "DELETE":
            deleteUser(w, r)
        default:
            http.Error(w, "不支持的方法", http.StatusMethodNotAllowed)
        }
    })

    // 启动服务
    http.ListenAndServe(":8080", nil)
}

运行命令:
go run *.go
服务将监听 :8080 端口。

测试API示例

  • 获取所有用户:GET http://localhost:8080/users
  • 获取单个用户:GET http://localhost:8080/user?id=1
  • 创建用户:POST http://localhost:8080/users,Body为JSON
  • 更新用户:PUT http://localhost:8080/user,发送完整用户对象
  • 删除用户:DELETE http://localhost:8080/user?id=1

基本上就这些。这个例子展示了如何仅用标准库快速搭建一个功能完整的RESTful服务。适合学习或小型项目使用。后续可扩展日志、中间件、数据库连接等功能。

今天关于《Golang构建简单RESTful API教程》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>