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;除非显式…

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

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

使用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;我们…

虹科分享丨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…

MySQL函数—流程函数

MySQL函数—流程函数&#xff1a;用于实现条件筛选&#xff0c;从而题搞语句的效率。 MySQL函数—流程函数 函数功能IF(value,t,f)如果value为true&#xff0c;则返回t&#xff0c;否则返回fIFNULL(value1,value2)如果value1不为空&#xff0c;返回value1&#xff0c;否则返回v…

5G安卓手机定制_基于天玑900的安卓主板方案

5G安卓手机方案是一款采用联发科MT6877(天玑900)平台的高性能、可运行安卓操作系统的5G智能模块。该手机采用台积电6纳米低功耗工艺&#xff0c;主频高达2.4GHz&#xff0c;内存支持LPDDR5&#xff0c;并支持5G Sub-6GHz全频段和5G双载波聚合技术等多种制式。同时&#xff0c;该…

docker相关

下载Ubuntu18.04文件64位&#xff08;32位安装不了MySQL&#xff09; https://old-releases.ubuntu.com/releases/18.04.4/?_ga2.44113060.1243545826.1617173008-2055924693.1608557140 Linux ubuntu16.04打开控制台&#xff1a;到桌面&#xff0c;可以按快捷键ctrlaltt 查…

国民技术N32G430C8开发笔记一-新建IAR工程

一、创建IAR工程 1、新建工程&#xff0c;保存到project文件夹。 2、添加SDK到工程。 根据原厂SDK的文件结构在IAR新建相应分组&#xff0c;把各个文件夹的文件加载进去&#xff0c;其中startup文件选择IAR平台的startup_n32g430_EWARM.s。 3、添加头文件路径&#xff0…

2024-01-24(ElasticSearch)

1.mysql和elasticsearch的架构&#xff1a; 2.IK分词器利于分中文词汇。 底层是有一个中文字典&#xff0c;这个字典中的中文词汇也是可以拓展的和禁用某些词。 3.mapping常见属性&#xff1a; type&#xff1a;数据类型 index&#xff1a;是否索引 analyzer&#xff1a;分…

重设红帽Linux root密码:简单实用指南

在使用红帽Linux系统时&#xff0c;我们可能会遇到忘记root密码的情况红帽linux系统root密码&#xff0c;这时候该怎么办呢&#xff1f;本文将详细介绍如何重置红帽Linux系统的root密码。 1.进入单用户模式 首先&#xff0c;我们需要进入单用户模式。开机时红帽linux系统root…

一个使用pyqt的word文档查重工具

一个使用pyqt的word文档查重工具 使用场景代码使用截图打包好的软件下载链接结尾 使用场景 有时我们在借鉴一篇文档之后还不想有太多重复&#xff0c;这个时候可以使用这个工具对两个word文档进行对比 代码 import sys from PyQt5.QtWidgets import QApplication, QMainWind…

Redisson 分布式锁解决主从一致性问题的原理

目录 一、主从不一致产生原因 二、Redisson 解决主从一致性的原理 一、主从不一致产生原因 1. Redis 主从集群&#xff1a;主从读写分离&#xff0c;主节点将数据同步给从节点 主节点&#xff1a;增删改从节点&#xff1a;读 2. 主从同步存在延迟&#xff0c;若主节点宕机…

前端开发提高效率的两大工具

一、浏览器中的开发者工具 怎么启动开发者工具&#xff1f; 在浏览器中按下F12或者鼠标右键点击检查 怎么利用&#xff08;常用的几点&#xff09;&#xff1f; 1、元素 点击标红的图标可以用于在页面选择元素&#xff0c;同时右侧会找到元素在前端代码中的位置 点击下方红…