登录
首页 >  Golang >  Go教程

Golang构建简单RESTfulAPI教程

时间:2025-10-30 21:29:38 342浏览 收藏

本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《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构建简单RESTfulAPI教程》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

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