共计 3356 个字符,预计需要花费 9 分钟才能阅读完成。
浏览本文之前,能够先读上一篇文章,对 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。
http://cloc.sourceforge.net v 1.64 T=0.91 s (97.2 files/s, 18596.7 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
Go 84 2537 2360 11796
make 1 8 0 63
YAML 2 8 0 47
Protocol Buffers 1 2 0 10
-------------------------------------------------------------------------------
SUM: 88 2555 2360 11916
-------------------------------------------------------------------------------
目录构造阐明
目录 | 作用 |
---|---|
根目录 | 整个 Web 框架的外围都在根目录上面,包含 server, router, middleware。 |
binding | 把 http request 的数据转成 Go 里自定义的构造体变量,能够不必本人去一一解析 http request 里的参数,缩小开发工作量。 |
examples | 应用 Gin 的一些代码示例,目前该目录只有一个 README.md,具体的例子在 Gin Examples 这个独自的 Repo 里。 |
ginS | 依赖 sync.Once 实现了一个单例版本的 gin.Engine,目前看来没啥用途,在和作者沟通中,能够先疏忽。 |
internal | Gin 外部用的函数。在 json 这个子 package 里援用了规范库的 encoding/json 和第三方的 json-iterator,在 bytesconv 这个子 package 包里实现了零内存调配版本的 string 和 byte 切片的相互转换。 |
render | 反对将 XML、JSON、YAML、ProtoBuf 以及 HTML 数据做渲染,返回给前端可辨认的响应格局。 |
testdata | 一些测试数据。 |
根目录源码阐明
依照源码重要水平排序
源码 | 作用 |
---|---|
gin.go | gin.Engine 的定义和办法实现,Gin 的入口程序 |
context.go context_appengine.go |
gin.Context 的定义和办法实现 |
response_write.go | 响应数据的解决 |
routergroup.go tree.go |
路由的具体实现,其中 tree.go 来源于 httprouter,基于 radix tree,不应用反射 |
auth.go recovery.go logger.go |
中间件,auth.go 是 http 鉴权中间件,recovery.go 是程序 panic 捕捉中间件,logger.go 是日志中间件 |
mode.go | Gin 服务启动模式的初始化治理,反对 debug, release 和 test 这 3 种模式 |
debug.go | mode.go 开启 debug 模式时,打印一些调试信息 |
fs.go | 和动态文件拜访相干的辅助代码,次要是给 routergroup.go 的 Static 办法用 |
path.go | 对 url 门路做解决的辅助函数 |
utils.go | 一些辅助函数 |
version.go | 记录以后 Gin 框架的版本信息 |
deprecated.go | 将来要被删掉的办法,目前只有一个 BindWith 办法。不应该在程序里应用 deprecated.go 里的办法。 |
doc.go | 目前没有理论用处,可疏忽 |
xx__test.go | 测试程序 |
在后续的文章里,会对 Gin 的每个源代码文件做具体解析。(https://mp.weixin.qq.com/s/An…)
文章开源地址
https://github.com/jincheng9/…
会有一个系列分享 Go Web 开发的方方面面。
欢送大家关注公众号:coding 进阶,学习更多 Go 常识。
正文完