不太一样的Go Web框架—总览
地址:https://github.com/Codexiaoyi/linweb
这是一个系列文章:
初衷
大概在半年前,在学习了Golang一段时间后,想着提升一下自己。恰巧看到了极客兔兔的 七天用Go从零实现系列 的Web框架篇。于是产生了自己学习写一个web框架的想法,一方面提升自己的代码设计能力,另一方面能够更加全面的了解一个web框架所需要的功能。
当然,linweb框架不追求极致性能(毕竟现在成熟的web框架性能已经非常好了),仅追求自己喜欢的编程范式,更多参考.net core的开发方式。
基本功能
在Golang的世界中,有许许多多优秀的Web框架。常见的有:
- gin https://github.com/gin-gonic/gin
- beego https://github.com/beego/beego
- iris https://github.com/kataras/iris
- chi https://github.com/go-chi/chi
- ......
在这其中,当前使用最广泛的应该就是gin了。gin在性能和编程规范方面都有着不错的表现,加上许多衍生的教学项目及使用简单等原因,是多数人入门Go语言Web编程的首选。
根据gin和极客兔兔的博客,我认为最最基础的Web框架需要实现的几个功能:
- http服务解析
- 路由解析(Router)
- 上下文(Context)
- 中间件(Middleware)
在个人平时写Web项目时,有些自己感兴趣的功能也会加上:
- 依赖注入(Injector)
- 模型验证与模型映射(model --- validate、map)
- 应用内缓存(cache)
面向接口
受到 go-micro(https://github.com/asim/go-micro)启发,我们将完全面向接口开发。
也就是我们所有的功能全部做接口抽象,主流程完全依赖于抽象接口。这样可以实现功能之间互相解耦,并且可以在不修改主流程代码的情况下自定义实现。也许!你不喜欢写的代码,觉得我的实现写的很烂,那么就可以自己写相关抽象的实现,并且无缝接入主流程中。
接口即文档
相关接口定义在 **/interfaces **文件夹中,这样还能顺便做到,接口即文档!开发者只需要看接口就可以理解并应用功能。
项目结构
项目的大致文件目录结构也非常简单,适合新手:
|-- docs 文档相关文件
|-- examples 示例项目
|-- interfaces 接口抽象的定义
|-- pkg 相关功能模块的接口实现
|-- cache
|-- context
|-- injector
|-- middleware
|-- model
|-- router
|-- test 主流程测试、mock测试文件等
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)