首发于 技术练级
Go Web框架Gin源码结构解析

Go Web框架Gin源码结构解析

阅读本文之前,可以先读本专栏 上一篇文章,对Web框架的核心组件有个了解。

源代码的目录结构

以v1.7.4版本为例,Gin的源码目录结构如下图所示

+---.github
|       ISSUE_TEMPLATE.md
|       PULL_REQUEST_TEMPLATE.md
|      
+---binding
|       binding.go
|       binding_msgpack_test.go
|       binding_nomsgpack.go
|       binding_test.go
|       default_validator.go
|       default_validator_test.go
|       form.go
|       form_mapping.go
|       form_mapping_benchmark_test.go
|       form_mapping_test.go
|       header.go
|       json.go
|       json_test.go
|       msgpack.go
|       msgpack_test.go
|       multipart_form_mapping.go
|       multipart_form_mapping_test.go
|       protobuf.go
|       query.go
|       uri.go
|       validate_test.go
|       xml.go
|       xml_test.go
|       yaml.go
|       yaml_test.go
|      
+---examples
|       README.md
|      
+---ginS
|       gins.go
|       README.md
|      
+---internal
|   +---bytesconv
|   |       bytesconv.go
|   |       bytesconv_test.go
|   |      
|   |---json
|           json.go
|           jsoniter.go
|          
+---render
|       data.go
|       html.go
|       json.go
|       msgpack.go
|       protobuf.go
|       reader.go
|       reader_test.go
|       redirect.go
|       render.go
|       render_msgpack_test.go
|       render_test.go
|       text.go
|       xml.go
|       yaml.go
|      
|---testdata
|    +---certificate
|    |       cert.pem
|    |       key.pem
|    |      
|    +---protoexample
|    |       test.pb.go
|    |       test.proto
|    |      
|    |---template
|            hello.tmpl
|            raw.tmpl
|   .gitignore
|   .travis.yml
|   auth.go
|   AUTHORS.md
|   auth_test.go
|   BENCHMARKS.md
|   benchmarks_test.go
|   CHANGELOG.md
|   codecov.yml
|   CODE_OF_CONDUCT.md
|   context.go
|   context_appengine.go
|   context_test.go
|   CONTRIBUTING.md
|   debug.go
|   debug_test.go
|   deprecated.go
|   deprecated_test.go
|   doc.go
|   errors.go
|   errors_1.13_test.go
|   errors_test.go
|   fs.go
|   gin.go
|   gin_integration_test.go
|   gin_test.go
|   githubapi_test.go
|   go.mod
|   go.sum
|   LICENSE
|   logger.go
|   logger_test.go
|   Makefile
|   middleware_test.go
|   mode.go
|   mode_test.go
|   path.go
|   path_test.go
|   README.md
|   recovery.go
|   recovery_test.go
|   response_writer.go
|   response_writer_test.go
|   result.txt
|   routergroup.go
|   routergroup_test.go
|   routes_test.go
|   test_helpers.go
|   tree.go
|   tree_test.go
|   utils.go
|   utils_test.go
|   version.go

使用cloc工具对源码做一个扫描,总共代码行数不到1.2W。

Languagefilesblankcommentcode
Go842537236011796
make18063
YAML28047
Protocol Buffers12010
SUM882555236011916


目录结构说明

目录作用
根目录整个Web框架的核心都在根目录下面,包括server, router, middleware。
binding把http request的数据转成Go里自定义的结构体变量,可以不用自己去逐个解析http request里的参数,减少开发工作量。
examples使用Gin的一些代码示例,目前该目录只有一个README.md,具体的例子在[Gin Examples]( github.com/gin-gonic/ex)这个单独的Repo里。
ginS依赖sync.Once实现了一个单例版本的gin.Engine,并且对gin.go里的方法做了简单的二次封装。平时做测试可以使用下,不建议生产使用,可以忽略。关于ginS在 GitHub我开过一个issue做讨论,感兴趣的可以通过后面的链接进行查看( github.com/gin-gonic/gi)
internalGin内部用的函数。在json这个子package里引用了标准库的encoding/json和第三方的[json-iterator]( github.com/json-iterato),在bytesconv这个子package包里实现了零内存分配版本的string和byte切片的互相转换。
render支持将XML、JSON、YAML、ProtoBuf以及HTML数据做渲染,返回给前端可识别的响应格式。
testdata一些测试数据。

根目录源码说明

按照源码重要程度排序

在后续的文章里,会对Gin的每个源代码文件做详细解析。

文章开源地址:

会有一个系列分享Go Web开发的方方面面。

欢迎大家关注公众号:coding进阶,学习更多Go知识。

代做工资流水公司贵阳企业对公流水图片揭阳打印银行流水账温州工资代付流水查询开封做车贷银行流水沧州工资流水app截图多少钱宿迁工资证明制作滁州企业流水打印制作重庆企业对公流水价格泰州代办工资流水app截图衡阳开工资流水app截图西宁查询企业流水打印贵阳公司银行流水打印宜春房贷流水费用金华入职银行流水多少钱咸阳查车贷银行流水南宁房贷工资流水 价格工资流水账单样本查询企业流水打印嘉兴代办离职证明江门代开个人工资流水信阳开企业对私流水九江薪资流水单办理淮安流水代办西宁工资流水单报价包头车贷工资流水 办理泰州工资流水模板上饶背调银行流水岳阳办理薪资流水单廊坊自存流水价格兰州代开公司流水香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

代做工资流水公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化