动漫网站网页设计代码,成都网页设计班,石材网站模板,全屏网站宽度使用 Go 和 Gin 框架构建简单的用户和物品管理 Web 服务
在本项目中#xff0c;我们使用 Go 语言和 Gin 框架构建了一个简单的 Web 服务#xff0c;能够管理用户和物品的信息。该服务实现了两个主要接口#xff1a;根据用户 ID 获取用户名称#xff0c;以及根据物品 ID 获…使用 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.获取用户名称
// 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.获取物品名称
// 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.路由设置
我们将上述接口绑定到路由中
func SetupRouter() *gin.Engine {router : gin.Default()// 用户相关接口router.GET(/user/:id, controllers.GetUserByID) // 根据用户ID获取用户名称// 物品相关接口router.GET(/item/:id, controllers.GetItemByID) // 根据物品ID获取物品名称return router
}4.数据库连接
package databaseimport (database/sql_ github.com/go-sql-driver/mysql
)var DB *sql.DBfunc InitDB() error {dsn : root:P110040593abctcp(127.0.0.1:3306)/pj12db?charsetutf8mb4parseTimeTruelocLocal // 数据库信息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电脑
查询结果