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

news2024/12/23 10:08:00

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

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

项目结构

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

数据库设计

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

![(https://i-blog.csdnimg.cn/direct/cfab321d7f6f4e5999fe014e930378f2.png)

!](https://i-blog.csdnimg.cn/direct/53f7571d3dde47e7a10b765ad3bb4554.png)

示例数据

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

-- 插入用户数据
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") // 从请求中获取用户ID
    var user models.User

    err := 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") // 从请求中获取物品ID
    var item models.Item

    err := 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.User
    err = 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 database

import (
	"database/sql"

	_ "github.com/go-sql-driver/mysql"
)

var DB *sql.DB

func InitDB() error {
	dsn := "root:P110040593abc@tcp(127.0.0.1:3306)/pj12db?charset=utf8mb4&parseTime=True&loc=Local" // 数据库信息
	var err error
	DB, 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.coloradmin.cn/o/2201031.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

spring boot itext7的生成一个pdf(hello,world),并且相关一些简单的使用方法及相关说明

1、我们经常会碰到生成Pdf的场景,比如说有很多题目,又比如说来个质检的报告,我们都需要导出为pdf,那这种情况有二种方法,一种是通过报表来实现,一种就是通过itext来生成。一般我们会通过报表来直接导出pdf。…

Liquid AI与液态神经网络:超越Transformer的大模型架构探索

1. 引言 自2017年谷歌发表了开创性的论文《Attention Is All You Need》以来,基于Transformer架构的模型迅速成为深度学习领域的主流选择。然而,随着技术的发展,挑战Transformer主导地位的呼声也逐渐高涨。最近,由麻省理工学院(M…

简述何为多态

1.多态的概念 多态是什么?首先我们从概念讲起,简单来讲,多态就是多种形态,当你要去完成同一件事情的时候,不同的人去完成这件事情会有不同的结果. 比如在买票的时候,如果是成人去买票,则会买到成人票;如果是学生,则会买到学生票. 2.多态的实现以及构成条件 首先,多态的实现…

【Flutter、Web——前端个人总结】分享从业经历经验、自我规范准则,纯干货

前言 hi,正式接触web前端已经经过了两年的时间,从大学的java后端转型到web前端,再到后续转战Flutter,逐渐对前端有了一些心得体会,其实在当下前端的呈现形式一直在变化,无论你是用原生、还是web还是混编的…

Django 1.2标准日志模块出现奇怪行为时的解决方案

在 Django 1.2 中,标准日志模块有时会出现意想不到的行为,例如日志消息未按预期记录、日志级别未正确应用或日志格式错乱等。这些问题可能源于日志配置不当、日志模块被多次初始化、或日志模块被其他包覆盖等原因。下面是一些常见问题的排查方法和解决方…

力扣21~25题

21题(简单): 分析: 按要求照做就好了,这种链表基本操作适合用c写,python用起来真的很奇怪 python代码: # Definition for singly-linked list. # class ListNode: # def __init__(self, v…

二、MySQL的数据目录

文章目录 1. MySQL8的主要目录结构1.1 数据库文件的存放路径1.2 相关命令目录1.3 配置文件目录 2. 数据库和文件系统的关系2.1 查看默认数据库2.2 数据库在文件系统中的表示2.3 表在文件系统中的表示2.3.1 InnoDB存储引擎模式2.3.2 MyISAM存储引擎模式 2.4 小结 1. MySQL8的主要…

宝塔docker中如何修改应用配置文件参数

今天在宝塔docker安装了kkfileview,相修改应用里的application.properties,却找不到在哪,如何修改? 下面教大家应用找文件修改。 docker安装好对应容器后,是这样 在这里是找不到对应修改的地方,其实docker…

Linux WIFI 驱动实验

直接参考【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.81 本文仅作为个人笔记使用,方便进一步记录自己的实践总结。 WIFI 的使用已经很常见了,手机、平板、汽车等等,虽然可以使用有线网络,但是有时候很多设备存在布线困难的情况&…

Windows10的MinGW安装和VS Code配置C/C++编译环境

1. MinGW下载安装 首先需要说明的是VS Code是一个编辑器,而不是编译器。‌ 编辑器和编译器是有很明显的区别 1.1 编辑器和编译器区别 编辑器‌是一种用于编写和编辑文本的应用软件,主要用于编写程序的源代码。编辑器提供基本的文本编辑功能,…

面试题:Redis(三)

1. 面试题 背景 问题,上面业务逻辑你用java代码如何写? 2. 缓存双写一致性谈谈你的理解? 3. 双检加锁策略 多个线程同时去查询数据库的这条数据,那么我们可以在第一个查询数据的请求上使用一个 互斥锁来锁住它。 其他的线程走到这…

内核编译 设备驱动 驱动程序

内核编译 一、内核编译的步骤 编译步骤: (linux 内核源码的顶层目录下操作 ) 1. 拷贝默认配置到 .config cp config_mini2440_td35 .config 2. make menuconfig 内核配置 make menuconfig 3. make uImage make u…

docker-compose无法切换用户

问题描述 jupyter:image: flink:1.19-pyprivileged: trueuser: rootports:- "9999:8888"volumes:- /data/docker_data/jupyter:/workcommand: sh -c "cd / && jupyter notebook --ip 0.0.0.0 --port 8888 --allow-root --NotebookApp.passwordsha1:658…

循环神经网络-LSTM网络

文章目录 前言一、LSTM网络简介二、LSTM的门结构1.遗忘门2.输入门3.输出门 三、总结 前言 循环神经网络(Recurrent Neural Networks,RNN)是一种特殊的神经网络,具有能够处理序列数据的能力,然而,RNN在处理…

团员申请书怎么写?这里归纳了一些模板

团员申请书怎么写?随着社会的快速发展和时代的进步,越来越多的青年人意识到加入团组织的重要性。作为新时代的青年,我们应当积极响应国家的号召,参与到团组织的建设中来。而想要成为共青团员,首先需要撰写一份规范的团…

新手一次过软考高级(系统架构设计师)秘笈,请收藏!

软考系统架构设计师是高级科目之一,也是比较有难度的科目,但是只要你把该掌握的知识掌握熟练,技能水平达到要求,那还是考可以拿下证书的。 系统架构设计师适合人群:适合熟悉开发过程与方法、数据库、信息安全的技术人员…

NLP: SBERT介绍及sentence-transformers库的使用

1. Sentence-BERT Sentence-BERT(简写SBERT)模型是BERT模型最有趣的变体之一,通过扩展预训练的BERT模型来获得固定长度的句子特征,主要用于句子对分类、计算两个句子之间的相似度任务。 1.1 计算句子特征 SBERT模型同样是将句子标记送入预训练的BERT模型…

OmniH2O——通用灵巧且可全身远程操作并学习的人形机器人(其前身H2O是HumanPlus的重要参考)

前言 由于我司一直在针对各个工厂、公司、客户特定的业务场景,做解决方案或定制开发,所以针对每一个场景,我们都会反复考虑用什么样的机器人做定制开发 于此,便不可避免的追踪国内外最前沿的机器人技术进展,本来准备…

数据库管理-第249期 23ai:全球分布式数据库-请求路由与查询过程(20241008)

数据库管理249期 2024-10-08 数据库管理-第249期 23ai:全球分布式数据库-请求路由与查询过程(20241008)1 客户端应用请求路由1.1 分片键1.2 Oracle连接驱动 2 查询过程和查询协调器2.1 指定一致性级别2.2 高可用与性能 总结 数据库管理-第249…

拍立淘API接口以图搜商品列表功能实现技术分享item_search_img|返回商品列表商品id商品价格url

开发背景 在电商平台的快速发展中,用户对于商品搜索的效率和准确性提出了越来越高的要求。传统的基于关键词的搜索方式,虽然在一定程度上满足了用户的需求,但在面对复杂的商品信息和多样化的用户搜索意图时,仍存在诸多局限性。为…