详解Go语言中Get/Post请求测试


Posted in Golang onJune 01, 2022

基础语法差不多了,需要开始实践到一下项目,先来web框架gin吧,做一个后端web服务。

在把项目搭建起来的过程中,我也要结合实际的工作经验,补充一些项目结构、开发组件上的理解。

项目地址:github地址

gin安装

先将gin安装一下,安装依赖go语言还是比较方便的。

在安装之前先配置一下goproxy。

命令如下:

go env -w GO111MODULE=on
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/   //阿里代理
go env -w GOPROXY=https://goproxy.cn   //七牛云代理

安装一下gin,命令如下:

go get github.com/gin-gonic/gin

Get请求测试

实现一个web服务还是比较简单的,创建一个router,绑定路由规则即可。先测试几个Get请求。

样例代码如下:

package main
 
import (
	"github.com/gin-gonic/gin"
	"net/http"
)
 
func main() {
	router := gin.Default()
	router.GET("/", func(context *gin.Context) {
		context.String(http.StatusOK, "hello world")
	})
 
	router.GET("/test/:name", func(context *gin.Context) {
		name := context.Param("name")
		context.String(http.StatusOK, "check param %s", name)
	})
 
	router.GET("/test1", func(context *gin.Context) {
		name := context.DefaultQuery("name", "张三")
		gender := context.Query("gender")
		context.String(http.StatusOK, "他叫%s,性别:%s", name, gender)
	})
 
	router.Run(":8080")
}

执行结果

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env:   export GIN_MODE=release
 - using code:  gin.SetMode(gin.ReleaseMode)

[GIN-debug] GET    /                         --> main.main.func1 (3 handlers)
[GIN-debug] GET    /test/:name               --> main.main.func2 (3 handlers)
[GIN-debug] GET    /test1                    --> main.main.func3 (3 handlers)
[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.
[GIN-debug] Listening and serving HTTP on :8080

[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend yo
u to set a value.
Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-
proxies for details.
[GIN-debug] Listening and serving HTTP on :8080

测试一下,这里我是用的接口测试工具为ApiPost

详解Go语言中Get/Post请求测试

详解Go语言中Get/Post请求测试

详解Go语言中Get/Post请求测试

注意

1、在使用context.DefaultQuery方法的时候,可以提供一个默认值。

2、除了可以使用":"来获取路径参数外,可以使用"*",可以匹配更多规则。我个人感觉我不会这么用get请求参数。

Post请求测试

Post请求是在项目中使用的比较多的,而且不管是使用form获取参数还是body,都十分常见。

同时返回的数据也不可能使用一行字符串,实际项目中还是使用json格式居多。

所以下面我使用form参数和body参数实现了一下post测试接口。

完成代码如下

package main
 
import (
	"encoding/json"
	"fmt"
	"github.com/gin-gonic/gin"
	"io/ioutil"
	"net/http"
)
 
type Result struct {
	Name string `json:"name"`
	Age  int    `json:"age"`
}
 
//反序列化为结构体对象
func parseJson(a string) Result {
	fmt.Printf("原始字符串: %s\n", a)
	var c Result
	if err := json.Unmarshal([]byte(a), &c); err != nil {
		fmt.Println("Error =", err)
		return c
	}
	return c
}
 
func main() {
	router := gin.Default()
	router.GET("/", func(context *gin.Context) {
		context.String(http.StatusOK, "hello world")
	})
 
	router.GET("/test/:name", func(context *gin.Context) {
		name := context.Param("name")
		context.String(http.StatusOK, "check param %s", name)
	})
 
	router.GET("/test1", func(context *gin.Context) {
		name := context.DefaultQuery("name", "张三")
		gender := context.Query("gender")
		context.String(http.StatusOK, "他叫%s,性别:%s", name, gender)
	})
 
	router.POST("/testPost", func(context *gin.Context) {
		name := context.PostForm("name")
		nick := context.DefaultPostForm("nick", "leo")
		context.JSON(http.StatusOK, gin.H{
			"status": gin.H{
				"code":    http.StatusOK,
				"success": true,
			},
			"name": name,
			"nick": nick,
		})
	})
 
	router.POST("/testPost2", func(context *gin.Context) {
		data, _ := ioutil.ReadAll(context.Request.Body)
		fmt.Println(string(data))
		context.JSON(http.StatusOK, gin.H{
			"code": http.StatusOK,
			"data": parseJson(string(data)),
		})
	})
 
	router.Run(":8080")
}

测试一下testPost和testPost2接口

详解Go语言中Get/Post请求测试

详解Go语言中Get/Post请求测试

注意

1、使用context.DefaultPostForm方法可以提供一个默认值。

2、可以使用gin.H方法构造json结构返回。

3、将获得打参数反序列化为结构体,这部分的代码使用到之前讲json解析的笔记。

到此这篇关于详解Go语言中Get/Post请求测试的文章就介绍到这了,更多相关Go语言 Get Post请求内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!


Tags in this post...

Golang 相关文章推荐
Go语言操作数据库及其常规操作的示例代码
Apr 21 Golang
golang如何去除多余空白字符(含制表符)
Apr 25 Golang
go 原生http web 服务跨域restful api的写法介绍
Apr 27 Golang
go结构体嵌套的切片数组操作
Apr 28 Golang
golang 实现两个结构体复制字段
Apr 28 Golang
Go语言设计模式之结构型模式
Jun 22 Golang
深入理解go slice结构
Sep 15 Golang
Go语言基础切片的创建及初始化示例详解
Nov 17 Golang
golang使用map实现去除重复数组
Apr 14 Golang
Golang日志包的使用
Apr 20 Golang
Golang解析JSON对象
Apr 30 Golang
Go语言编译原理之变量捕获
Aug 05 Golang
Golang实现可重入锁的示例代码
May 25 #Golang
Go web入门Go pongo2模板引擎
May 20 #Golang
Go语言入门exec的基本使用
May 20 #Golang
Golang并发工具Singleflight
May 06 #Golang
深入理解 Golang 的字符串
May 04 #Golang
Golang入门之计时器
May 04 #Golang
Golang 入门 之url 包
May 04 #Golang
You might like
PHP默认安装产生系统漏洞
2006/10/09 PHP
PHP生成和获取XML格式数据的方法
2016/03/04 PHP
javascript数组的扩展实现代码集合
2008/06/01 Javascript
event.X和event.clientX的区别分析
2011/10/06 Javascript
javascript动画浅析
2012/08/30 Javascript
js 获取时间间隔实现代码
2014/05/12 Javascript
JQuery做的一个简单的点灯游戏分享
2014/07/16 Javascript
Nodejs关于gzip/deflate压缩详解
2015/03/04 NodeJs
jQuery Uploadify 上传插件出现Http Error 302 错误的解决办法
2015/12/12 Javascript
jquery.cookie实现的客户端购物车操作实例
2015/12/24 Javascript
小程序开发实战:实现九宫格界面的导航的代码实现
2017/01/19 Javascript
Bootstrap表单使用方法详解
2017/02/17 Javascript
vue无限轮播插件代码实例
2019/05/10 Javascript
webpack HappyPack实战详解
2019/10/08 Javascript
利用原生JS实现欢乐水果机小游戏
2020/04/23 Javascript
jQuery+css实现的点击图片放大缩小预览功能示例【图片预览 查看大图】
2020/05/29 jQuery
在Vue里如何把网页的数据导出到Excel的方法
2020/09/30 Javascript
Python实现Linux中的du命令
2017/06/12 Python
浅谈python jieba分词模块的基本用法
2017/11/09 Python
使用C++扩展Python的功能详解
2018/01/12 Python
python使用Tesseract库识别验证
2018/03/21 Python
Python3基于sax解析xml操作示例
2018/05/22 Python
Python实现爬虫爬取NBA数据功能示例
2018/05/28 Python
解决pycharm运行时interpreter为空的问题
2018/10/29 Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
2019/02/22 Python
python返回数组的索引实例
2019/11/28 Python
通过实例了解python__slots__使用方法
2020/09/14 Python
德国BA保镖药房中文网:Bodyguard Apotheke
2021/03/09 全球购物
教师自我鉴定范文
2013/11/10 职场文书
天猫某品牌专卖店运营计划书
2014/03/21 职场文书
村委会换届选举方案
2014/05/03 职场文书
幸福家庭标语
2014/06/27 职场文书
加强作风建设心得体会
2014/10/22 职场文书
给校长的建议书作文500字
2015/09/14 职场文书
谢师宴学生答谢词
2015/09/30 职场文书
公务员学习中国梦心得体会
2016/01/05 职场文书