Gin 的启动过程、路由及上下文源码解读

Gin 的启动过程、路由及上下文源码解读,第1张

Engine 是 gin 框架的一个实例,它包含了多路复用器、中间件和配置中心。

gin 通过 Engine.Run(addr ...string) 来启动服务,最终调用的是 http.ListenAndServe(address, engine) ,其中第二个参数应当是一个 Handler 接口的实现,即 engine 实现了此接口:

Engine.ServeHTTP() 会先初始化一个空的上下文,然后挂上请求 c.Reuqest = req ,随后执行 engine.handlerHTTPRequest(c) (包含主要处理逻辑的函数)。

以上就是正常处理一个请求的主要逻辑,其他的就现阶段来说先忽略了。

Engine 组合了 RouterGroup。

RouterGroup 实现了 IRouter 接口,IRouter 接口是 IRoutes 接口和 Group 函数组合而成。

RouterGroup 的结构体只有四个属性:

当新建 Engine 时,会初始化一个 RouterGroup 结构,RouterGroup 是组合在 Engine 中的(所以 Engine 可以调用 RouterGroup 的所有方法),同时 Engine 的引用也记录在了 RouterGroup 上。

如上,RouterGroup 实现了 IRouter 接口,下面是一些方法的实现。

gin 通过上方 RouterGroup 暴露的几个方法添加路由,底层使用的方法是 Engine.addRoute(method, path string, handlers HandlerChain) 。

Engine.trees 属性是存储所有路由信息的总入口。它是一信枣个切片,其中每个元素对应一种 method 并且是一个多叉树的根节点。

当 addRoute 时,先根据 method 找到对应的 tree (Engine.trees[i])。然后会比较 加入者 的 path 和 node 中的 path 相似的部分, 相似的部分 作为 父结点,不同的部分作为 子结点。以 多叉树 的方式存储下来。

这里会把 URL 中的路由变量也当作字符串存入树中,因为相同 URL 他们的变量袭坦宴也是一样的。

当请求进来时,因为 Engine 实现了 Handler 接口,所以最后会调用到 Engine.ServeHTTP 内。

找路径在

root.getValue() 比较复杂,这里就不多解释了。

gin@v1.7.7 context.go

Context 中定义了一些属性和方法,用于扩展一些功能。

可以看到,这些方法主要用来获取 gin 自身 Context 的一些信息。

Context 中保存了所有 handlers 列表,存在 Context.handlers 数组中,并用下标 Context.index 标记当前执行的位置。

当主动取消调用链时,会将 index 设置成一个最大值 63( math.MaxInt8 / 2 ),也即调用链最大支持 64 个函数。

Context 中还提供了其他一些函数,当取消调用链的时候,可以设置请求返回的状态码和返回数据信息等。

Context 中的 httpWriter 整理一下。

gin 在 Context 中定义了错误信息字段 Context.Errors 切片,可以链式存储错误信息。

Go 原生的 Context 是通过 ValueContext 来存储元数据信息的,每个 ValueContext 只能存储一对信息,存储多个信息对需要将许多 ValueContext 组成链条,读写很不高效。

gin 的 Context 中存的元数据数据是存在 Context.Keys map[string]interface{} 属性中的,比起原生的 Context 使用起来会更高效。

是指用在 URL 路径中设置的参数,如 /user/:id 的 id 参数。

存储在 Context.Params 属性中,其本质是一个切片,每一个元素是一个 K/V 元组。

因此拍银,在 URL 中是可以使用重复的变量名的(如 /test/:id/case/:id ),但获取值就需要自己从属性中获取了(如: c.Params[0] )。

Query 类是用在 URL 后的参数部分(如: ?id=1 )。

gin 通过 Context.queryCache 属性存储 query 参数,在调用获取 Query 参数时以懒加载的方式初始化: c.queryCache = c.Request.URL.Query() 。

需要注意的是它也支持传入 map 和 array,map 的传入需要像这样 ?m[k1]=v1&m[k2]=v2 ,array 的传入像这样 ?a=1&a=2 。

包含 PostForm、FormFile、MultipartForm 等。

先略

gin 为方便使用,通过绑定引擎设置了自动绑定用户输入和结构数据的方法。

这里包含设置状态码、设置响应头以及等信息。

只说一些值得注意的

这些方法除了 .Value() 方法外,其他都是返回的默认空值,略。

本文主要讲述一下 Windows 下安装 Gin 框架以及遇到的一些坑。安装前请先确保已安装配置好 go 的语言环境。

官方安装地址如下(请先往下看):

Gin中文文档

1.添加两个环境变量,否宏闭则 go get 命令会很慢,请参考如下网站:

GoProxy 中国

先设置一下代理,添加两个环境变量,如下:

2.配置 Goland ,本人使用的开发工具是 Goland ,以下配置均以 Goland 开发工具为例。

这个 *** 作的目的是帆歼让我们可以在任意的位置创建我们的项目,而不用拘泥于 GOPATH 目录下。

创建 go 项目的方式有两种:

方式一:

此时会在项目中生成一个 go.mod 文件。

方式二(建议):

用 Goland 直接创建新项目,依次点击 File->New->project->Go Modules (vgo) ,创建一个新的 go 项目。Location改成自己想要的位置即可。

后续的步骤跟方式一第三步类似,通过 go get 命令获取 Gin 框架源码。

在项目中创建一个 go 文件,这里我就直接拿 Gin 中文文档中给的示例了。然后执行 go run 文件名,浏览器地址栏输入 localhost:8080/ping ,看到输出信息就说明成功了。

补充几个命令:

import "github.com/gin-gonic/态绝冲gin" 导入 gin 后可以执行如下命令:

本文结束!

第一,琴酒是指一种烈酒,鸡尾酒的六大基酒之一。

第二,琴酒是指一部日本漫画《名侦探柯南》里的第一反派角色。

[编辑本段]◇琴酒◆---一种烈酒

[编辑本段]¤琴酒的由来

琴酒(Gin),又称"金酒"或"杜松子酒",是人类第一种为特殊目的所造的烈酒,琴酒的故乡在荷兰,它起源于1660年,最先是由一位荷兰的大学教授席尔毕斯(Sylvius)所发明,其目的是为了让荷兰人预防感染热带性疾病,最初是作为利尿、清热的药剂使用。不久人们发现这种利尿剂香气和谐、口味协调、醇和温雅、酒体洁净,具有净、爽的自然风格,很快就被人们作为正式的酒精饮腔猛唯料饮用。琴酒的伍培怡人香气主要来自具有利尿作用的杜松子。杜松子的加法有许多种,一般是将其包于纱布中,挂在蒸馏器出口部位。蒸酒时,其味便串于酒中,或者将杜松子浸于绝对中性的酒精中,一周后再回流复蒸,将其味蒸于酒中。有时还可以将杜松子压碎成小片状,加入酿酒原料中,进行糖化、发酵、蒸馏,以得其味。有的国家和酒厂配合其它香料来酿制琴酒,如荽子、豆蔻、甘草、橙皮等。而准确的配方,厂家一向是非常保密的。后来,传入美国,则被大量的使用在鸡尾酒的调制上。现在的琴酒,主要是以谷物为原料,经过糖化、发酵、蒸馏成高度酒精后,加入杜松子、柠檬皮、肉桂等原料,再进行第二次的蒸馏,即形成琴酒。

[编辑本段]¤琴酒的功效

在鸡尾酒的酒谱里,琴酒的使用量非常的大,一些有名的鸡尾酒,成份大都离不开琴酒,例如:世界知名的马丁尼〔Martini〕便是。而琴酒中因为含有高成份的杜松子,所以,近年来台湾亦十分流行以琴酒泡白葡萄干来预防关节炎,据说效果非常好。

琴酒+白葡萄干做法:

1、将一斤半的白葡萄干放入干燥容器中。

2、.将格林诺伦敦琴酒或金普森伦敦琴酒倒入,直到覆盖所有的白葡萄干为止。

3、.约放置七天的时间,让白葡萄干将琴酒完全吸收。 (容器不需加盖,过程中可以搅拌,以加速琴酒的吸收)

4、.将浸泡好的「琴酒白葡萄干」放进有盖的器皿保存。 ※食用方法:每天吃九粒「琴酒白葡萄干」,也可以拌入色拉一起食用

[编辑本段]¤琴酒的配料

在英国造琴酒的配方,是用百分之七十五的玉米,百分之十五的大麦芽、百分之十的其他谷物,然后搅碎、加热、发酵,与造威士忌差不多,完全发酵后的谷物汁再用连续蒸馏器来蒸馏,蒸馏出的酒含一百八十到一百八十八个酒精纯度(Proof)在加上蒸馏水,降低到一百二十。然后于琴酒蒸馏器中加上香料再蒸。由蒸馏得到酒味的方法,是造琴酒的一种艺术,各种味道不同的琴酒,也是由于其材料种类与成分的关系。

[编辑本段]¤琴酒的种类

琴酒是近百年来调制鸡尾酒时最常使用的基酒,其配方多达千种以上,故有“琴酒是鸡尾酒心脏”之说。

琴酒主要有以下几个品种:

●淡体琴酒

淡体琴酒,最早用的是伦敦附近的制造商,他们在瓶签上印有London Dry Gin,但现在美国或其他国家的造酒商,也用后面两个英文字。市面上所有的琴酒,都用了这个Dry字,瓶签上有写Dry Gin、Extra Dry GinN、Very Dry Gin、London Dry Gin等事实上都是一个性质,说明此种酒不甜,不带原体味。

●伦敦琴酒

以麦芽及五谷为原料,主要产品有不甜琴酒与老汤姆酒〔Old Tom Gin〕,后者有甜味。

老汤姆是伦敦知启制的甜琴酒,有好几项关于此酒的传说。其中以金鲁斯爵士(Lordkinross)在他书中记载的比较合乎逻辑。他相信老汤姆原是英政府的间谍,他在伦敦租了间房子,钉了个猫形的招牌来卖酒,有两条管子连接着他的房子。行人想买酒时,可把钱由上边猫嘴里的粗管内丢进去,口中并念念有词,然后他就由下面的细管倒酒出来,买的人就对着管子喝,这也可能是自动贩买机的祖先。

●普里茅斯琴酒

除伦敦琴酒外,英国普里茅斯也出琴酒,与伦敦琴酒类似,惟其香味不同,它比伦敦琴酒,质更浓,香味更重。

●美国琴酒

美国琴酒(American Gin)与伦敦琴酒稍微不同,但这两种酒,都可作成很好的混合饮料。其产品分成二级,瓶底有突出的D字者,表示蒸馏而成,有R字者表示精馏〔Rectifier〕而成。

●英国琴酒

英国与美国琴酒的不同在于两个重要因素,一为英国琴酒蒸馏后的酒精度较低,故保有较多谷物特性虽然蒸馏酒精度低,但是装瓶的酒精度却较高;二为水质,当然,英国与美国的水质不同,自然影响到酒酿以及蒸馏的烈酒特性。

●荷兰琴酒

主要的产区集中在斯希丹(Schiedam)一带,是荷兰人的国酒。荷式琴酒是以大麦芽与裸麦等为主要原料,配以杜松子酶为调香材料,经发酵后蒸馏三次获得的谷物原酒,然后加入杜松子香料再蒸馏,最后将精馏而得的酒,贮存于玻璃槽中待其成熟,包装时再稀释装瓶。荷式金酒色泽透明清亮,酒香味突出,香料味浓重,辣中带甜,风格独特。无论是纯饮或加冰都很爽口,酒度为52度左右。因香味过重,荷式金酒只适于纯饮,不宜作混合酒的基酒,否则会破坏配料的平衡香味。

荷式琴酒酒在装瓶前不可贮存过久,以免杜松子氧化而使味道变苦。而装瓶后则可以长时间保存而不降低质量。荷式琴酒常装在长形陶瓷瓶中出售。新酒叫Jonge,陈酒叫Oulde,老陈酒叫Zeet oulde。比较著名的酒牌有:亨克斯(Henkes)、波尔斯(Bols)、波克马(Bokma)、邦斯马(Bomsma)、哈瑟坎坡(Hasekamp)。

荷式琴酒酒的饮法也比较多,在东印度群岛流行在饮用前用苦精(Bitter)洗杯,然后注入荷兰琴酒,大口快饮,痛快淋漓,具有开胃之功效,饮后再饮一杯冰水,更是美不胜言。荷式琴酒加冰块、再配以一片柠檬,就是世界名饮干马天尼(Dry Martini)的最好代用品。

荷兰琴酒(Holland)或(Dutch Gin)的味道是竦中带甜,无论是喝纯的或加冰块,都很爽口。它基本上是用大麦芽作的,其味道是来自杜松莓。荷兰是唯一有专卖占酒酒店的国家,它冰过或加上冰块,再加一片柠檬,是辣马丁尼(Dry Martini)酒最好的代用品。

琴酒不用陈年,他的美味是由多种香料蒸馏来的,不过在美国有些琴酒会陈年一段时间,陈年后会成为淡金黄色,称为Golden Gin,虽然已陈年过,但在商标上都不注明。如果是荷兰造的淡黄色的琴酒,都是用焦糖染的色。最受人欢迎的琴酒鸡尾酒,就是马丁尼鸡尾酒,不过它只是上百种琴酒鸡尾酒配方里的一种。

[编辑本段]◇琴酒◆---漫画《柯南》中人物

[编辑本段]☆概述

琴酒,在《名侦探柯南》里代号为Gin,是组织的重要人物。早期动画和漫画也有翻译为金恩,杜松子酒等等。其真实姓名不祥,国籍不祥,年龄不祥,估计29-32岁之间,经常和Vodka出现在一起,是最早出现的黑衣组织成员。在第一集《云霄飞车杀人事件》里,工藤新一到偷窥Vodka和一公司经理交易的画面。不料被Gin发现,然后给工藤吃下 APTX4869,让工藤变成了小孩子,也就是整部漫画的主角柯南。Gin是一个高大的白种人男子,留着一头飘逸的金色长发,绿色的瞳孔,左撇子。平时总是一身黑色风衣,戴一顶黑色礼帽。脸总是被帽子和刘海遮掩着,看不清他的样子。擅长q法,推理能力极强。观察力,洞察力,随机应变能力等均超人一等。是柯南最大的也是最危险的对手。

琴酒为人冷酷无情,杀人时没有丝毫犹豫,对知道组织秘密的人会毫不留情地灭口。他的性格成熟,冷酷,遇事冷静,疑心重。 Gin的爱q是意大利产的Beretta M1934。开的汽车是德国产的保时捷356A,车身黑色,车牌号一度是4869,后改为4368。另外,Gin很喜欢用保时捷上的点烟器吸烟。

和Sherry的关系:Gin应该喜欢Sherry。这一点在漫画24卷提到了,当柯南刚要问灰原“Gin是不是在组织里追过你”的时候被她打断,灰原说要离开,柯南就说“那我就放心了”。意思是指“你留在这里没问题了”,其实就是指“Gin很了解你,他知道你不会留下所以就不再在这儿追捕你了,但是其实我把你留下了”。后来Gin的画面也说明了这一点(“那个女人是不会留在这个地方的,她八成已经跟那个男人逃命去了”)。

[编辑本段]☆所属组织

琴酒所属组织为黑暗组织,又有一称为黑衣组织。

其组织成员:

◇Gin(琴酒)

亦称Vodka的大哥,黑衣组织的高层,地位应该仅次于Boss。他对组织和Boss都十分忠心。Gin负责过抢劫银行,狙击暗杀,寻找叛徒等等任务,在组织中相当活跃。而且组织的人都对他十分敬畏。有着冷酷的眼神,和雪莉似有很深的关系,是个智能型的罪犯,和柯南多次交手都未曾吃亏。有一辆从德国买来的黑色保时捷,型号是356A,车牌号一度是4869,后改为4368。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12286302.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存