golang websocket绑定用户_golang web开发——参数绑定(下)之Trie参数路由

背景

在之前的上一篇文章通配符的改造之下,我们的Trie已经初步具备了路由功能,虽然还有bug但是并不影响我们对参数路由原理的了解,也会帮助我们后面学习httprouter,或者gin等高级优秀框架的golang web框架的学习,本小节主要完成参数绑定这个工作,做一些少许的改动就可以完成基本功能

本小节可以一起学习到的知识有

  1. 一个简单的支持restful的参数绑定功能
  2. golang web服务端获取到get和post请求之后,如何修改或者说如何新增参数
  3. golang中方法作为参数传递,方法属于一等公民

代码调整

1.Node数据结构调整

因为我们如果用通配符匹配到正确的参数之后,我们需要进行参数绑定,举例来说,我们之前设定了"/user/group/:id"之后,当有"/user/group/22"请求到来的时候,我们要知道id=22,然后把这个参数偷偷的塞到请求参数中,所以我们在search方法中匹配到路径之后,要记录参数,首先我们先改造Node结构,新增2个参数,一个是map结构,记录id=22这类的请求参数,还有一个参数就是Handler

bb6095e6c54f86e9ce39e861861ba03f.png

Handler这个我们重点描述一下,比较特殊,handler是一个方法,在java中,在java8的时候才支持方法参数化,不过在golang中方法却是一等公民,这个以后我们会经常讲方法作为参数传递

1fb35288836014c238d1afb4344bd9a4.png

2.search方法的改造

search方法的改造就是获取restful风格URL路径中的参数,将解析到的参数绑定到map中去,相对比较简单,不赘述,修改点我已经在源码中标注了

ae0cb8c7eb4a52aec1d7044a19bc4281.png

路由改造

我们修改一下main函数,首先先添加一个路由,"/get/user/:id"这种url处理的handler叫做getUserById,然后我们使用golang原生的http方法,绑定一个跟路由,表示我们处理所有类型的请求,只是我们这个router方法不做具体的业务逻辑处理,只是简单的进行子方法匹配和参数绑定功能

2becdb930707ea5f22e3910106dd69f2.png

router方法如下,使用request.RequestURI方法之后,这边主要是调用之前写的Trie的search方法,因为我们之前改造过search方法,如果是通配符匹配的话,就会绑定uri中的参数,接下来我们要做的事情就是把解析到的参数偷偷塞到原有的请求体中去

b7f561f54ba2e052cc799378b0220de4.png

GET方法偷偷塞方法体代码如下

d5daa5294877553fbcae2a258a0c2cf8.png

POST方法偷偷塞参数到原始参数如下

6268ea0dc047af4be20a7078f48f8c54.png

最后调用node节点中的一等公民Handler

a456041cb90ca1e2721dac35ea591f2f.png

getUserById的逻辑就比较简单,获取到请求的用户id,返回一个json就可以了

a991a2cab35ac94e49d6b438b3240fcc.png

测试

1.postmanGet请求

93e1976b2d503c7e897b308e7deea2df.png

2.postman POST请求

19dca67994ef405a084a691067e5a8ca.png

小结

说下自己心得吧,其实个人觉得这个知识点挺重要的,既能够学习到一种数据结构Trie,也能够吧参数绑定的功能入个门,也能够了解restful这种风格的逻辑处理,并且也进一步熟悉了golang http模块的知识,还是有一点收获的吧,虽然上述写的代码bug很多,逻辑缺陷也有,但这并不妨碍我们了解这边的知识点,接下来我们将学习golang如何操作mysql数据库

如果你也是一个golang爱好者,如果想一起学习的话,可以点一个关注,接下来的日子大家一起学习讨论,谢谢~ (不贴github地址了,如果有需要可以私信我)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值