go api(get post传参,数据库,redis) 测试

介绍:分别测试get请求,post请求,请求链接数据库,以及redis操作。
1.api代码

package mainimport (_ "database/sql""encoding/json""github.com/gin-gonic/gin""go-test/com.zs/database""go-test/com.zs/models""go-test/com.zs/repositories""go-test/com.zs/services""go-test/com.zs/utils""log""net/http""strconv"
)func main() {router := gin.Default()//reDB, _ := config.ConnRedis()log.Println("coming main method ...")db, err := database.NewMySQLDB()if err != nil {log.Fatal(err)}userRepository := &repositories.UserRepository{DB: db,}userService := &services.UserService{UserRepository: userRepository,}http.HandleFunc("/users", func(w http.ResponseWriter, r *http.Request) {switch r.Method {case http.MethodGet:users, err := userService.GetUsers()if err != nil {utils.ErrorHandler(w, err)return}utils.RespondJSON(w, users, http.StatusOK)case http.MethodPost:var user models.Usererr := json.NewDecoder(r.Body).Decode(&user)if err != nil {utils.ErrorHandler(w, err)return}err = userService.CreateUser(&user)if err != nil {utils.ErrorHandler(w, err)return}utils.RespondJSON(w, user, http.StatusCreated)default:w.WriteHeader(http.StatusMethodNotAllowed)response := models.ErrorResponse{Message: "Method not allowed",}json.NewEncoder(w).Encode(response)}})// http.HandleFunc get 请求拼接参数查询//http.HandleFunc("/getUserById", func(w http.ResponseWriter, r *http.Request) {//	switch r.Method {//	case http.MethodGet://		n, err := strconv.Atoi(r.URL.Query().Get("id"))//		user, err := userService.GetUserByID(uint(n))//		if err != nil {//			utils.ErrorHandler(w, err)//			return//		}//		utils.RespondJSON(w, user, http.StatusOK)////	}//})// router := gin.Default() get请求拼接参数查询router.GET("/getUserById", func(c *gin.Context) {uid := c.Query("id")num, _ := strconv.Atoi(uid)user, err := userService.GetUserByID(uint(num))if err != nil {return}// 返回字符串//c.String(http.StatusOK, "姓名:%s,年龄:%s", user.Name, strconv.Itoa(user.Age))// 返回json数据c.JSON(http.StatusOK, user)})// router := gin.Default() post请求拼接参数查询router.POST("/postUserById", func(c *gin.Context) {//uid := c.PostForm("id") //post请求中 form表单形式//num, _ := strconv.Atoi(uid)//user, err := userService.GetUserByID(uint(num))//if err != nil {//	return//}返回字符串c.String(http.StatusOK, "姓名:%s,年龄:%s", user.Name, strconv.Itoa(user.Age))返回json数据//c.JSON(http.StatusOK, user)//接收json数据处理方式if err := c.ShouldBindJSON(&models.UserJsonReq); err != nil {c.JSON(400, gin.H{"error": "无效的JSON格式或参数错误"})return}tId := uint(models.UserJsonReq.ID)tName := models.UserJsonReq.NametAge := models.UserJsonReq.Agelog.Printf("name:%s,age:%s", tName, strconv.Itoa(tAge))user, err := userService.GetUserByID(tId)if err != nil {return}// 测试往redis中添加string 数据//res1, err := reDB.Set(config.GetCtx(), "name", user.Name, time.Minute).Result()//if err != nil {//	fmt.Println(err)//}//fmt.Printf("插入成功:%s\n", res1)//测试往redis中批量添加string 数据//res2, err := reDB.MSet(config.GetCtx(), "user_id", user.ID, "age", user.Age).Result()//if err != nil {//	fmt.Println(err)//}//fmt.Printf("插入多行成功:%s\n", res2)// 测试从redis中取出数据//fmt.Printf("取出数据userId:%s\n", reDB.Get(config.GetCtx(), strconv.Itoa(int(user.ID))))//fmt.Printf("取出数据userAge:%s\n", reDB.Get(config.GetCtx(), strconv.Itoa(user.Age)))// 删除user_id=1 数据//n, err := reDB.Del(config.GetCtx(), "user_id", strconv.Itoa(int(user.ID))).Result()//if err != nil {//	fmt.Println(err)//}//fmt.Printf("删除了%d\n", n)// 以上只是对redis中string 操作,其它list,hash,set查看具体官方文档// 附几篇不错的博客:https://blog.csdn.net/qq_21275565/article/details/129904644,//https://blog.csdn.net/weixin_43495948/article/details/127893883?ops_request_misc=&request_id=&biz_id=102&utm_term=go%20%E9%9B%86%E5%90%88redis%20%E6%B5%8B%E8%AF%95&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-6-127893883.142^v99^pc_search_result_base4&spm=1018.2226.3001.4187c.JSON(http.StatusOK, user)})log.Println("Server is running on port 8000")// 和http.HandleFunc使用//log.Fatal(http.ListenAndServe(":8000", nil))// 和router := gin.Default()使用log.Fatal(router.Run(":8000"))
}

2.相关sql

CREATE TABLE `users` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,`age` int(12) DEFAULT '18',PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;INSERT INTO `user_demo`.`users` (`id`, `name`, `age`) VALUES (1, 'aa', 12);
INSERT INTO `user_demo`.`users` (`id`, `name`, `age`) VALUES (2, 'bb', 22);

3.测试
3.1 get
在这里插入图片描述

3.2 post
这里面包括了测试redis
在这里插入图片描述
在这里插入图片描述4.完整代码
项目地址

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

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

相关文章

[BSidesCF 2020]Had a bad day

先看url&#xff0c;发现可能有注入 http://655c742e-b427-485c-9e15-20a1e7ef1717.node5.buuoj.cn:81/index.php?categorywoofers 试试能不能查看index.php直接?categoryindex.php不行&#xff0c;试试伪协议 把.php去掉试试 base64解码 <?php$file $_GET[category];…

Vue3+TS+dhtmlx-gantt实现甘特图

实现样式 因为只做展示&#xff0c;所以实现很简单 实现功能 自定义列头增加斑马线&#xff0c;实际结束时间&#xff08;自定义实现&#xff09;自定义进度展示&#xff0c;根据层级让进度背景颜色变浅marker标记今天自定义提示框内容 实现 import { gantt } from "d…

STM32F407移植OpenHarmony笔记1

参考文档&#xff1a; OpenAtom OpenHarmonywidthdevice-width,initial-scale1.0https://docs.openharmony.cn/pages/v3.2/zh-cn/device-dev/get-code/gettools-acquire.md/ 搭建环境 安装linux系统: Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-91-generic x86_64) 下载源代码&a…

如何在转接的NVME 固态盘上安装WIN 系统并引导启动

问题&#xff1a; 家里的台式机一直挂着一块128G的SSD固态盘&#xff0c;由于家里自己建了NAS存储&#xff0c;所以基本数据都在NAS里&#xff0c;台式机就没有挂机械盘了&#xff0c;但是最近台式机空间被系统侵蚀&#xff0c;显然就不够用了&#xff0c;除了清理系统&#xf…

bash 5.2中文修订4

Compound Commands 复合命令 复合命令是 shell 编程语言的结构。每个构造都以保留字或控制运算符开始&#xff0c;并以相应的保留字或运算符终止。与复合命令关联的任何重定向&#xff08;请参阅 Redirections &#xff09;都适用于该复合命令中的所有命令&#xff0c;除非显式…

harmonyOS app 开发环境配置流程

1.安装DevEco Studio&#xff0c;注意nodejs版本&#xff0c;安装过程中有提示&#xff0c;添加hdc到系统环境变量中&#xff0c;用于调用hdc命令 2.开启真机设备的开发人员选项&#xff0c;以及开启5555端口&#xff08;需要连接usb线&#xff09; https://developer.harmonyo…

vue3使用AntV G6 (图可视化引擎)历程[二]

上期回顾&#xff1a;历程[一]描述了基本的树状图的绘制&#xff0c;默认节点类型defaultNode中的type是circle,下面这篇描述的是节点抽离自定义节点并做数据静态渲染。 官网地址&#xff1a;https://g6-next.antv.antgroup.com/manual/introduction 一、案例效果 二、自定义节…

正则表达式元字符-详细说明

字符 说明 \ 将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如&#xff0c;"n"匹配字符"n"。"\n"匹配换行符。序列"\\\\"匹配"\\"&#xff0c;"\\("匹配"("。 ^ 匹配输入字符串…

编写Bash脚本程序从记录文件中提取history命令的优化,再介绍linux bash语法和结构

目 录 一、引言 二、脚本代码实现 三、bash语法和结构 &#xff08;一&#xff09;基本语法 1、脚本开始与结束 2、注释 3、变量 4、数据类型 5、控制结构 6、循环控制 7、函数 8、算术运算 9、算术操作符和逻辑操作符 &#xff08;二&#xff09;命令相关…

c++文件操作 (1) -- 读写文件

目录 为什么使用文件操作 文件输入流和输出流 -- 相对于内存而言 文件操作 1. 文件操作常用类以及头文件 2. 文件输入流(写文件操作) 1. 写文本文件 1&#xff09;文件操作是使用对象来实现的 2&#xff09;文件输出 3&#xff09;打开文件 open函数 &#xff…

UDF学习(一)

1.1什么是UDF&#xff1f; 用户自定义函数&#xff0c;可以动态的连接到fluent求解器上来提高求解器性能。用户自定义函数用C语言编写&#xff0c;使用DEFINE宏来定义。可以使用标准C语言的库函数&#xff0c;也可以使用fluent Inc.提供的预定义宏&#xff0c;通过这些预定义宏…

使用CSS 或 SASS 实现主题背景切换效果

目录 &#x1f389;应用背景 &#x1f389;分析实现思路 &#x1f389;CSS实现主题切换 &#x1f389;SCSS实现主题切换 &#x1f389;结语 &#x1f389;应用背景 现在的主流网站中&#xff0c;无论是一些技术文档获取官网&#xff0c;都存在着使用一个switch按钮实现主题…

Nginx与keepalived实现集群

提醒一下&#xff1a;下面实例讲解是在mac虚拟机里的Ubuntu系统演示的&#xff1b; Nginx与keepalived实现集群实现的效果 两台服务器都安装Nginx与keepalived&#xff1a; mater服务器的ip(192.168.200.2) backup服务器的ip(192.168.200.4) 将 mater服务器Nginx与keepalived都…

【DG 特长生2019】模拟赛赛后总结(2024.1.24)

打了330pt,订正后350pt T1 签到 T2 dfs剪枝&#xff08;虽然我写挂了&#xff09; T3 NOIP原题 T4 floyd 主要是想分享一下T4。 写了一种基于floyd的做法。 感觉好像和大部分人的写法不太一样。 因为看到大小关系&#xff0c;我就想到了传递性。 floyd是可以维护传递…

Unity中URP下获取每一个额外灯数据

文章目录 前言一、我们先来看一下 SimpleLit 中的调用二、获取额外灯索引1、非移动平台2、非GLES平台3、大多数平台 三、获取额外灯数据 前言 在上一篇文章中&#xff0c;我们知道了URP下是怎么获取额外灯数量的。 Unity中URP下获取额外灯数量 在这篇文章中&#xff0c;我们…

Oracle按日周月年自动分区

目录 1、分区键 2、初始分区 3、周月年自动分区 4、按日自动分区表建表语句 与普通建表语句相比&#xff0c;分区表多了一些分区信息&#xff1b; 1、分区键 以下面销售明细表为例&#xff0c;以data_dt为分区键&#xff0c;NUMTODSINTERVAL(1, day) 按日分区 PARTITION …

再学微信小程序

1 微信小程序有几个文件 微信小程序主要包含以下几个文件&#xff1a; .wxml&#xff08;WeiXin Markup Language&#xff09;&#xff1a;用于描述小程序的页面结构&#xff0c;类似于 HTML。在这个文件中&#xff0c;可以使用小程序提供的组件和自定义的组件&#xff0c;以…

虹科分享丨AR与AI融合加速,医疗护理更便捷!

来源&#xff1a;虹科数字化与AR 虹科分享丨AR与AI融合加速&#xff0c;医疗护理更便捷&#xff01; 原文链接&#xff1a;https://mp.weixin.qq.com/s/Fi0wNfk_TDXRo_1-6cSRNQ 欢迎关注虹科&#xff0c;为您提供最新资讯&#xff01; #AR眼镜 #医疗护理 根据Reports and Da…

Linux ping命令教程:如何检查网络连接状况(附案例详解和注意事项)

Linux ping命令介绍 Ping&#xff08;Packet Internet Groper&#xff09;命令用于检测主机。通过发送Internet控制消息协议(ICMP)Echo数据包到目标主机&#xff0c;检测目标主机是否可达。如果互联网上两个主机之间可以通信&#xff0c;并且没有防火墙阻止这种通信&#xff0…

存储过程为什么使用DELIMITER $$

这是正确的存储过程写法&#xff0c;可以成功执行&#xff0c;相比较上图的报错&#xff0c;增加了DELIMITER&#xff0c;简单解释下这个命令的用途&#xff0c;在MySQL中每行命令都是用“&#xff1b;”结尾&#xff0c;回车后自动执行&#xff0c;在存储过程中“&#xff1b;…