首页 > 后端开发 > Golang > 正文

Golang构建小型RESTful API服务示例

P粉602998670
发布: 2025-09-25 17:26:01
原创
424人浏览过
使用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接口逻辑:

小门道AI
小门道AI

小门道AI是一个提供AI服务的网站

小门道AI117
查看详情 小门道AI
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 中注册路由并启动服务:

立即学习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服务示例的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号