获取URL参数
在前面的学习中,我们已经学会了使用gin框架进行请求的转发、html模板的渲染,以及静态资源的引入,那么进行我们要进行一系列的参数获取的学习。
那么这个重要吗?非常重要,非常非常重要!!!
学过Java的朋友在学习框架的时候也会进行学习路径参数的获取,
比如,通过一些注解来进行获取参数,例如:RequestParam、PathVariable注解等等。
那这些都是Java的获取方式,那么我们的go世界是如何获取参数的呢?
一起来看看吧,超级舒服
获取querystring参数
- 可以看到哈,这个
wd
就是搜索的参数哈,我们在百度里面搜索修改wd的参数,也能完成一个搜索的功能。 - 但是我们在前端填写后,如何让后台获取到这个参数呢?
这里我们给出了 三种获取方式
str = c.Query("wd")
str := c.DefaultQuery("wd","acwing")
str , ok := c.GetQuery("wd")
- 第一种:尝试获取
wd
的参数,获取不到就是nil - 第二种:我们设置了一个默认值,如果没有这个参数那么就会使用默认值代替这个参数
- 第三种:我们尝试获取
wd
的参数,获取不到会返回一个false,然后我们另外做处理即可! - 我们来实战一下!!!
- 我们r.run跑起来看看结果!!!
- 我们通过正常的搜索,完全可以获取参数哈!
- 第二个也可以正常处理,当遇到没有参数的时候进行获取默认的参数
- 第三个也可以正常获取参数,没有参数就返回false,我们在false时做特殊处理。
- 嘿嘿嘿,科科不会怪的我
获取form参数
- 这个一般时获取表单的里面的数据,而表单里面的提交,一般都是post请求,所以,我们这个要多写一个函数用于获取post请求。
那么针对 post请求
,go也给出了三种同步的方式,聪明的人已经猜到了,没错,和get请求类似,啊哈哈哈哈哈哈
username := c.PostForm("username")
username = c.DefaultPostForm("username","somebody")
username , ok := c.GetPostForm("username")
- 这里我们就用获取用户名来举例子哈!表单一般都有用户名满,啊哈哈哈哈哈哈
- 用法和楼上差不多,我们就不一一举例子了哈,这里就随便选择一个来实战下哈!
为了方便我们提交post请求,我们建立两个模板
用于登录的界面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录页面</title>
</head>
<body>
<form action="/login" method="post">
<label for="username">username:</label>
<input type="text" name="username" id="username">
<input type="submit" value="登录">
</form>
</body>
</html>
- 返回获取post请求参数的界面 ,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>
hello {{ .username }}
</div>
</body>
</html>
- 非常的人性哈!来看看后台代码吧!
- 我们搞好后直接运行看看结果哈!
- 点击登录后,即跳转到post请求的模板界面,并将名称参数获取到了!
我们都知道哈,浏览器里面如果不通过表单的形式进行提交,而直接在url参数提交的话,都是get请求哈,有的小伙伴就是不想这么麻烦,就是想直接测试一下这个接口能不能正确获取对吧,那有木有办法呢?
答案是有的哈, 我记得前面的文章里面有提到过, postman这个工具哦,可以直接发送post等请求
我们一起看看吧!
- 可以看到哈,我们也成功的对他们做了测试,并且返回了我们想要看到的数据,工具还是舒服呢!
获取json参数
- 这个划重点哈,我们前后端数据交互,最常用的格式就是json格式了。
- 在go里面同样如此,我们go提供了三种方式进行传输json数据
map
、gin.H
、结构体
,来试试看吧
- gin.H有蛮多人看不明白哈,如果你点进源码多看看的话,就会知道,里面其实就是一个map,啊哈哈
- gin框架就是为了大家方便,封住了下下。然后我们跑起来看看哈!
- 非常的完美和人性哈!!!下一个下一个
获取path参数
- 就玩意就是获取路径上面的参数,没有标明emmm举个例子说明吧,感觉文字难以解释
http://localhost:9090/index/张三/18
- 看看这个请求哈,这个表示我们发送一个get请求,里面携带了两个参数,
18岁的张三
,能理解吧!嘿嘿嘿 - 那么这个我们要如果获取呢?也很简单哈,gin提供了Param方法
name := c.Param("name")
- 这样就可以了吗?
- 怎么可能呢,路径上的写法要发送一丢丢的改变才可以哈!一起来看看吧!
- 路径前面加个冒号 : ,即可哈,跑起来看看效果吧!
- 这也是成功的获取到了哈,非常的舒服
- 有的小伙伴就问了,这个有啥用呢,我们不是已经有那个获取参数的方法了吗,为什么还要整一个这个呢?
- 存在即合理,不知道大家有木有看到过有的个人博客网站呀,后面跟的上面 ***/2018/12/4这样的路径哈,可以通过这样保存时间呀,兄弟们。
参数的绑定
- 这玩意还是要说说的,如果不搞这个,那我们以后搞项目的时候,参数一多,头就大了,
- 来看个代码
- 好兄弟们,这个是post请求获取参数,一个一个来呀!
- 大家都经历过校招吧,去公司官网里面搞简历的时候,那个表单,给人都写吐了,
- 起码得二三十个参数吧,这总不能一个一个去写这个玩意吧,那不得难受呀,开发人员。
- 为了不然我们难受哈,我们就来学习参数的绑定。
首先我们先搞个结构体哈,类似于Java里面的类
type UserInfo struct {
Username string `json:"username" xml:"username" form:"username"`
Password string `json:"password" xml:"password" form:"password"`
}
- 后面的设置标记,不然就要使用大写,首字母大写,在go里面的表示对外开放权限哦,不然访问不到的呢
对于装配数据,go也是给了函数的
err := c.ShouldBind(&u)
- 就是这个哈,很好记忆吧 , shouldbind,应该绑定绑定,啊哈哈哈哈哈,
- 特别注意哈 :
里面的参数一定要是结构体的指针哈!!!
先来发个get请求哈!
- 是的,你没有看错,这就可以了,也不用我们去一个一个去写参数了,直接shouldbind。
- 来看看效果。
- 非常的完美哈!
- 我们再来试试post请求吧,毕竟表单才是我们需要搞的重点,谁没事在url填写参数呀,哎嘿嘿
- post请求和get没啥差别哈,搞get是为了方便看效果,毕竟post要制作表格,
- 但是今天说了
postman
这个工具满,所以我们使用postman工具
进行测试哈
- 非常的完美和人性哈!
有木有感觉比Java要舒服,啊哈哈哈哈哈!(手动狗头保命)