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

这篇具有很好参考价值的文章主要介绍了go api(get post传参,数据库,redis) 测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

package main

import (
	_ "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.User
			err := 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.Name
		tAge := models.UserJsonReq.Age

		log.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.4187

		c.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
go api(get post传参,数据库,redis) 测试,数据库,golang,redis

3.2 post
这里面包括了测试redis
go api(get post传参,数据库,redis) 测试,数据库,golang,redis
go api(get post传参,数据库,redis) 测试,数据库,golang,redis4.完整代码
项目地址文章来源地址https://www.toymoban.com/news/detail-823596.html

到了这里,关于go api(get post传参,数据库,redis) 测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java http GET POST 请求传参

    HTTP POST请求传参方式 方式一: 方式二 HTTP GET请求传参方式

    2024年02月15日
    浏览(47)
  • uniapp发起post和get请求——this.$http.get 和 this.$http.post传参

    main.js按照内容自行修改

    2024年02月15日
    浏览(50)
  • GET和POST的区别以及传参详细解说

    该文章为自己学习及经验总结,里面可能会有不准确的地方,后续会不断的修正 文章内容主要针对软件测试人员需要掌握的范围 GET 和 POST 只是 HTTP 协议中两种请求方式,而 HTTP 协议是基于 TCP/IP 的应用层协议,无论 GET 还是 POST,用的都是同一个传输层协议,所以在传输上,

    2023年04月09日
    浏览(39)
  • 前端post,get请求传参方式 以及后台接收

    post请求: 1:js中 2:使用 首先引入方法js: 调用方法 3:浏览器请求 4:后台参数接收 get请求: 第一种:通过params对象传递,将参数以键值对的形式传递,当传递的参数为多个时,浏览器会自动拼接进行分割 1:js中 2:使用 首先引入方法js: 调用方法 3:浏览器请求 4:后台

    2024年02月10日
    浏览(43)
  • axios中get、post请求传参区别及使用

    params 中的参数是通过地址栏传参,一般用于get请求 data 是添加到请求体(body)中的, 一般用于post请求 get请求只能传query参数,query参数都是拼在请求地址上的 post可以传body和query两种形式的参数 一般情况下post请求方式的Parameter Type是body,在一些极少情况下,post请求的参数

    2024年02月14日
    浏览(45)
  • postman进行post、get参数传递及中文乱码和各类型参数传递和json格式传参和日期型参数传递和响应数据传回

    postman是一种测试工具 用postman直接在其上输入参数名和参数值就行,不用区分post和get请求方法,当然java代码要改变一点,在响应注解的方法里面添加和postman中输入的参数名一样的形参 get请求: 代码:注意在响应注解的方法里面新添加了形参,其就对应着上面图片中的参数

    2024年02月07日
    浏览(54)
  • 原来可以这么玩?Jmeter接口性能测试工具玩转测试Redis数据库(超详细)

    Jmeter作为当前非常受欢迎的接口测试和性能测试的工具,在企业中得到非常广泛的使用,而redis作为缓存数据库,也在企业中得到普遍使用,那如何使用jmeter来测试redis数据库呢? 今天我们就来讲一讲怎么使用jmeter来调用redis。 Jmeter准备 由于jmeter本身并没有带有redis的测试入

    2024年02月13日
    浏览(56)
  • 【毕设必备】手把手带你用Python搭建一个简单的后端服务- API的创建,前后端交互的数据传递,GET,POST,JSON,FLASK

    Python是一种 流行 的高级编程语言,具有易于学习和使用的特性,被广泛应用于各种领域。 简单易学 :Python的语法清晰简洁,易于理解和学习。与其他编程语言相比,Python的语法设计非常直观,使得编程新手也能快速上手。 强大的标准库和丰富的第三方库 :Python拥有一个庞

    2024年02月04日
    浏览(145)
  • c++ oatpp api服务端取get参数,post内容

    最近用oatpp做接口,部分功能已经上线,比较简单 1,取post  json 如上图  post    application/json 格式 首先定义post路由路径  然后我们完成Handler_Getxxx 函数,获取json,并取数据返回

    2024年02月02日
    浏览(41)
  • <JDBC> 获取数据库连接的五种方式:你真的get到了吗?

    ❤写在前面 ❤博客主页: 努力的小鳴人 ❤系列专栏: JDBC ❤欢迎小伙伴们, 点赞👍关注🔎收藏🍔 一起学习! ❤如有错误的地方,还请小伙伴们指正!🌹 JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API),定义

    2023年04月08日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包