安装gin

go get -u github.com/gin-gonic/gin
go get -u github.com/go-sql-driver/mysql

创建相关目录

gotest->conifg->database.go->redis.go->controller ->index.go->model->user.go->router->router.gomain.go 

在这里插入图片描述

创建用户模型

package model
import ("gotest/config"
)
type User struct {ID   int    `json:"id"`Name string `json:"name"`Age  int    `json:"age"`
}func GetUsers() ([]User, error) {var users []User rows, err :=config.DB.Query("SELECT id, name, age FROM users")if err != nil {return nil, err}defer rows.Close()for rows.Next() {var user Userif err := rows.Scan(&user.ID, &user.Name, &user.Age); err != nil {return nil, err}users = append(users, user)}return users, nil
}
//插入
func InsertUser(user *User) (int, error) {result, err := config.DB.Exec("INSERT INTO users(name, age) VALUES(?,?)", user.Name, user.Age)if err != nil {return  0, err}id,err := result.LastInsertId() // 获取最后插入的IDif err != nil {return  0, err}return int(id),nil
}
//更新
func UpdateUser(user *User) (int, error) {result, err := config.DB.Exec("UPDATE users SET name=?, age=? WHERE id=?", user.Name, user.Age, user.ID)if err != nil {return  0, err}rowsAffected, err := result.RowsAffected() // 获取影响的行数if rowsAffected == 0 {return  0, err}return int(rowsAffected),nil
}
//删除
func DeleteUser(id int)  (int, error) {result, err := config.DB.Exec("DELETE FROM users WHERE id=?", id)if err != nil {return  0, err}rowsAffected, err := result.RowsAffected() // 获取影响的行数if rowsAffected == 0 {return  0, err}return int(rowsAffected),nil
}

封装mysql连接

package configimport ("database/sql""log"_ "github.com/go-sql-driver/mysql" // 导入MySQL驱动
)var DB *sql.DBfunc InitDB() {var err errordsn := "root:root@tcp(localhost:3306)/test?charset=utf8mb4&parseTime=True&loc=Local" // 替换为你的数据库信息DB, err = sql.Open("mysql", dsn)if err != nil {log.Fatalf("Error opening database: %v", err)}err = DB.Ping()if err != nil {log.Fatalf("Error pinging database: %v", err)}log.Println("Connected to database")
}

main.go

package main
import ("gotest/router""gotest/config"
)
func main() {config.InitDB() // 初始化数据库连接r := router.SetupRouter() // 使用路由设置函数来初始化路由和中间件等。r.Run(":8080")            // 监听并在 0.0.0.0:8080 上启动服务。默认情况下,Gin使用的是HTTP协议。如果你需要HTTPS,可以使用`r.RunTLS(":8080", "certfile", "keyfile")`。
}

调用DB

package controllerimport ("github.com/gin-gonic/gin""gotest/config""gotest/model"
)
//查列表
func UserHandler(c *gin.Context){list,err :=model.GetUsers();if err != nil {c.JSON(500,gin.H{"message": "Error","data":err.Error(),})}c.JSON(200,gin.H{"message": "User List","data":list,})
}
func UserInsertHandler(c *gin.Context) {name := "adsdklss"age := 18user := &model.User{	Name: name,Age:  age,}id, err := model.InsertUser(user)if err != nil {c.JSON(500, gin.H{"message": "Error","data": err.Error(),})}c.JSON(200, gin.H{"message": "Insert success","data": id,})
}func UserUpdateHandler(c *gin.Context) {name := "修改名字"age := 18user := &model.User{	Name: name,Age:  age,ID:   1,}id, err := model.UpdateUser(user)if err != nil {c.JSON(500, gin.H{"message": "Error","data": err.Error(),})}c.JSON(200, gin.H{"message": "Update success","data": id,})
}func UserDelHandler(c *gin.Context) {uid :=1;id, err := model.DeleteUser(uid)if err != nil {c.JSON(500, gin.H{"message": "Error","data": err.Error(),})}c.JSON(200, gin.H{"message": "del success","data": id,})
}

启动服务

   go run  main.go

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/96396.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/96396.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/96396.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL 层面行转列

背景:如果对一些评论、点赞、收藏等互动数据,使用了按照 type 分类存储,num 也是对应的。这样如果创建一个帖子,那么就会出现 3 行数据(type 不同,num 不同,对应评论点赞和收藏)&…

langchain4j笔记篇(阳哥)

一 概述1.1 概述langchain4j:langchain for java1.2 作用langchain4j的目标是简化将LLM集成到java应用程序中的过程。二 案例简单helloworld2.1 大模型调用三件套1.阿里百炼平台的通义模型: https://bailian.console.aliyun.com/2获取api-key&#x…

有鹿机器人的365天奇幻日记:我在景区当扫地僧

第一章 古建守护者:2cm的极致艺术琉璃瓦下的秘密记得那是个晨雾缭绕的清晨,我接到首个重要任务:清扫明代琉璃碑亭。这里的每块地砖都是文物,传统清洁工具根本不敢靠近。每天以2cm的精准贴边沿碑座作业,如今我每周都要为…

Objective-C方法参数标签怎么设置

在Objective-C中,方法名称可以通过几个标签名称组成,这是跟C/C中完全不一样的地方。每个标签都是字段冒号的写法,冒号后面是方法的参数,参数包括参数类型和参数变量,其中参数类型要用括号括起。方法参数的标签是通过在…

20250910_《SQL Server 数据库事务日志定期清理方案(精简优化版)》以10.1.1.31服务器的gtp-default数据库为例

《SQL Server 数据库事务日志定期清理方案(精简优化版)》 一、前提条件 数据库 gtp-default 已设置为完整恢复模式 (FULL)。 每天凌晨02:00执行完整备份,保证日志备份可用。 SQL Server Agent 已启用。 作业所有者为 sa,具有 sysadmin 权限。 Agent 服务账号 NT Service\S…

实习项目包装--HTTP 协议和 Web API

好的,完全没问题!你问到了一个非常核心且基础的知识领域,这是现代Web开发和几乎所有网络应用的基石。我们暂别嵌入式系统,专门来上一堂关于 HTTP 协议和 Web API 的详细课程。 我会从最根本的概念讲起,逐步深入到你所…

ICCV-2025 | 中科院自动化所世界模型助力具身导航!NavMorph:连续环境中的视觉语言导航自演化世界模型

作者:Xuan Yao1,2^{1,2}1,2, Junyu Gao1,2^{1,2}1,2, Changsheng Xu1,2,3^{1,2,3}1,2,3单位:1^{1}1中科院自动化所多模态人工智能系统国家重点实验室,2^{2}2中国科学院大学人工智能学院,3^{3}3鹏城实验室论文标题:NavM…

【ARDUINO】ESP8266的AT指令返回内容集合

一、基础测试指令(确认模块通信) 1. AT(测试模块是否响应) 功能:检测ESP8266与控制器(如Arduino)的串口通信是否正常。 返回内容: 成功:OK(无额外数据,仅确认通信正常) 失败:无返回(可能是波特率不匹配、接线错误) 示例:发送:AT 返回: OK二、Wi-Fi模式配置指…

Mockoon:开源免费的本地Mock服务工具,提升前后端联调效率

你有没有过这种经历?做前端开发时,后端同事的接口还没写完,你这边要调页面数据,只能对着空控制台发呆?要么手动写个 JSON 文件当假数据,改一次数据就得重新保存文件、刷新页面;要么用在线 Mock …

【Mysql|第一篇】Mysql的安装与卸载、Navicat工具的使用

一、Mysql的安装与卸载: 1、查看是否安装过mysql: (1)cmd中输入mysql看是否有显式提醒 (2)右击此电脑,选择管理,在左侧栏中找到服务,查看是否有与mysql相关的 2、卸载的…

贪心算法应用:流行病干预策略问题详解

Java中的贪心算法应用:流行病干预策略问题详解 贪心算法是一种在每一步选择中都采取当前状态下最优的选择,从而希望导致全局最优解的算法策略。在流行病干预策略问题中,贪心算法可以有效地帮助我们做出资源分配决策,以达到最优的防…

git删除最近一次提交包括历史记录。

方法一:删除最近的一次提交(最常见) 如果你只是想撤销最后一次提交,这是最简单的方法。在本地删除提交 使用 git reset --hard 命令,将你的本地分支回退到上一次提交。Bashgit reset --hard HEAD^HEAD^ 指的是 HEAD 的…

前端拖拽功能实现全攻略

前端拖拽功能实现指南 设计一个拖拽组件确实需要考虑不少细节。下面我为你梳理了从核心思路、关键实现到注意事项的完整方案,并用表格对比了 Vue 和 React 的实现差异,希望能帮你全面掌握。 🧠 一、核心设计思路 一个拖拽组件的核心在于感…

ASP.NET MVC 连接 MySQL 数据库查询示例

为您创建一个完整的 ASP.NET MVC 应用程序,演示如何通过点击按钮连接 MySQL 数据库并查询数据表。 完整实现步骤 1. 首先安装必要的 NuGet 包 在项目中安装以下 NuGet 包: MySql.Data Dapper(可选,用于简化数据访问&#xff0…

合理安排时间节点,避免影响正常生产——制造企业软件系统上线的关键考量

在制造企业的发展中,引入新的软件系统是提升管理效率、优化业务流程的重要举措。然而,软件系统的上线过程如果安排不当,很可能会对企业的正常生产造成负面影响。作为一名制造企业的行政经理,在软件选型和推进使用的过程中&#xf…

【一包通刷】晶晨S905L(B)/S905L2(B)/S905L3(B)-原机安卓4升级安卓7/安卓9-通刷包

【一包通刷】晶晨S905L(B)/S905L2(B)/S905L3(B)-原机安卓4升级安卓7/安卓9-通刷固件包线刷方法:1、准备好一根双公头USB线刷刷机线,长度30-50CM长度最佳,同时准备一台电脑;2、电脑上安装好刷机工…

Vite开发:从入门到精通

序章:构建之道现代前端的破局者前端发展简史:从 Grunt、Gulp、Webpack 到 Vite构建工具的本质与未来为什么是 Vite?——新时代的构建哲学本书阅读导览与学习路径第一篇 入门启蒙识得 Vite 真面目第1章 Vite 初识什么是 Vite?设计理…

Spring事件监听机制(二)

接着之前的事件监听机制实现,我们可以进一步优化。从以下两个方面:1.使用EventListener注解Configuration public class TestListener2 {public static void main(String[] args) {AnnotationConfigApplicationContext context new AnnotationConfigApp…

STM32物联网项目---ESP8266微信小程序结合OneNET平台MQTT实现STM32单片机远程智能控制---代码篇(四)

一、简介该篇代码实现了ESP8266上传数据到云平台的功能(可以更改命令和温度的数据),我只测试了上传数据,是没有问题的,如果自己由别的需求可以自行在云平台创建设备和更改代码:二、工程源码这个代码是进行验…

城际班车驾驶员安全学习课程

背景 正在做一个班车预约小程序,里面需要增加一个功能:驾驶员在线学习打卡功能: 图文学习内容,学习完之后,一键打卡:学习完毕;视频学习内容,看完后,一键打卡&#xff1…