使用 Go 和 Gin 框架构建简单的用户和物品管理 Web 服务

server/2024/10/15 19:23:25/

使用 Go 和 Gin 框架构建简单的用户和物品管理 Web 服务

在本项目中,我们使用 Go 语言和 Gin 框架构建了一个简单的 Web 服务,能够管理用户和物品的信息。该服务实现了两个主要接口:根据用户 ID 获取用户名称,以及根据物品 ID 获取物品名称。本文将介绍项目的整体结构、数据库设计、接口实现以及如何测试这些接口。

项目结构

项目的目录结构如下:
在这里插入图片描述

数据库设计

本项目使用 MySQL 数据库存储用户和物品信息。我们创建了两张表:

在这里插入图片描述

示例数据

我们在数据库中插入了一些示例用户和物品数据:

-- 插入用户数据
INSERT INTO users (name) VALUES ('张三'); -- 用户ID 1
INSERT INTO users (name) VALUES ('李四'); -- 用户ID 2-- 插入物品数据
INSERT INTO items (name, user_id) VALUES ('书籍', 1);  -- 张三的书籍
INSERT INTO items (name, user_id) VALUES ('电脑', 2);  -- 李四的电脑
INSERT INTO items (name, user_id) VALUES ('手机', 1);   -- 张三的手机

在这里插入图片描述

接口实现

1.获取用户名称

go">// GetUserByID 根据用户ID获取用户名称
func GetUserByID(c *gin.Context) {id := c.Param("id") // 从请求中获取用户IDvar user models.Usererr := database.DB.QueryRow("SELECT id, name FROM users WHERE id = ?", id).Scan(&user.ID, &user.Name)if err != nil {if err == sql.ErrNoRows {c.JSON(http.StatusNotFound, gin.H{"message": "用户未找到"})} else {c.JSON(http.StatusInternalServerError, gin.H{"message": "查询用户时出错"})}return}c.JSON(http.StatusOK, user)
}

2.获取物品名称

go">// GetItemByID 根据物品ID获取物品信息
func GetItemByID(c *gin.Context) {id := c.Param("id") // 从请求中获取物品IDvar item models.Itemerr := database.DB.QueryRow("SELECT id, name, user_id FROM items WHERE id = ?", id).Scan(&item.ID, &item.Name, &item.UserID)if err != nil {if err == sql.ErrNoRows {c.JSON(http.StatusNotFound, gin.H{"message": "物品未找到"})} else {c.JSON(http.StatusInternalServerError, gin.H{"message": "查询物品时出错"})}return}// 查询物品所属用户的信息var user models.Usererr = database.DB.QueryRow("SELECT id, name FROM users WHERE id = ?", item.UserID).Scan(&user.ID, &user.Name)if err == nil {fmt.Println("用户名称:", user.Name) // 模拟打印日志}c.JSON(http.StatusOK, item)
}

3.路由设置

我们将上述接口绑定到路由中:

go">func SetupRouter() *gin.Engine {router := gin.Default()// 用户相关接口router.GET("/user/:id", controllers.GetUserByID) // 根据用户ID获取用户名称// 物品相关接口router.GET("/item/:id", controllers.GetItemByID) // 根据物品ID获取物品名称return router
}

4.数据库连接

go">package databaseimport ("database/sql"_ "github.com/go-sql-driver/mysql"
)var DB *sql.DBfunc InitDB() error {dsn := "root:P110040593abc@tcp(127.0.0.1:3306)/pj12db?charset=utf8mb4&parseTime=True&loc=Local" // 数据库信息var err errorDB, err = sql.Open("mysql", dsn)if err != nil {return err}// 连接数据库return DB.Ping()
}

测试接口

使用 Postman 来测试接口:

获取用户名称:GET http://localhost:8080/user/1 # 查询用户ID为1(张三)

查询结果:在这里插入图片描述

获取物品名称:GET http://localhost:8080/item/2 # 查询物品ID为2(电脑)

查询结果:


http://www.ppmy.cn/server/132337.html

相关文章

物联网IoT平台 | 物联网IoT平台的定义

物联网IoT平台:定义、发展与应用在当今信息化时代,物联网(Internet of Things,简称IoT)已经成为推动社会进步和产业升级的重要力量。物联网IoT平台,作为连接物理世界与数字世界的桥梁,正逐步改变…

使用Windows创建一个MFC应用【带界面】

MFC使用教程【对初学者保姆型友好!】 目录 前提条件 1:创建MFC应用程序 2. 项目结构解读 引用 外部依赖项 头文件 源文件 资源文件 文件功能详解 项目的主要流程 步骤2:配置OpenCV 安装OpenCV 包含目录与库文件 步骤3&#xff1…

windows推送docker镜像仓库bat脚本

windows推送docker镜像仓库脚本(保存下边内容存储为bat文件) 用户名密码、镜像仓库地址和路径请自行修改 仓库名称和标签用空格分隔 执行流程 1、本地如果不存在镜像则会从官方仓库拉取(保证自己的网络可以正常访问) 2、自动打标签并推送 3、推送成功…

滚珠花键润滑技术优化:保障灵敏度与长寿命

滚珠花键的灵敏度对于机械系统的性能至关重要,它直接关系到传动系统的响应速度、精度和稳定性,高灵敏度的滚珠花键能够迅速准确地传递力和运动,减少滞后和误差,确保机械系统的高效、精确运行。那么,应该如何提高滚珠花…

Java | Leetcode Java题解之第473题火柴拼正方形

题目&#xff1a; 题解&#xff1a; class Solution {public boolean makesquare(int[] matchsticks) {int totalLen Arrays.stream(matchsticks).sum();if (totalLen % 4 ! 0) {return false;}int len totalLen / 4, n matchsticks.length;int[] dp new int[1 << n…

ajax请求

ajax实现的步骤 1.创建xhr[XmlHttpRequest]对象 var xhr new XMLHttpRequest(); 2.配置请求信息 xhr.open("get|post","url",false/true); 3.发送请求 xhr.send(); 4.判断请求是否发送成功发 if(http_request.readyState4 && http_request…

Java基础(1)

1.来源 Java最初是由美国Sun公司开发的&#xff0c;最初是为了开发面向家电产品的软件而设计的。1981年&#xff0c;Sun公司在研究‌C的基础上&#xff0c;重新定义了一套新的语言系统&#xff0c;这就是Java的前身——‌Oak。后来经过不断改进&#xff0c;Sun公司于1995年正式…

算法刷题技巧

算法题&#xff1a;https://leetcode.cn/studyplan/top-100-liked/ 哈希表 使用哈希表&#xff0c;增删改查的时间复杂度均为O(1)。何时使用哈希表&#xff1f; 在某个区域内查找一个已知元素&#xff0c;可以使用哈希表作为这个区域根据一个特征对元素进行分类&#xff0c;特征…