这是一个系列文章:

初衷

大概在半年前,在学习了Golang一段时间后,想着提升一下自己。恰巧看到了极客兔兔的 七天用Go从零实现系列 的Web框架篇。于是产生了自己学习写一个web框架的想法,一方面提升自己的代码设计能力,另一方面能够更加全面的了解一个web框架所需要的功能。

当然,linweb框架不追求极致性能(毕竟现在成熟的web框架性能已经非常好了),仅追求自己喜欢的编程范式,更多参考.net core的开发方式。

基本功能

在Golang的世界中,有许许多多优秀的Web框架。常见的有:

  • ......

在这其中,当前使用最广泛的应该就是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测试文件等
基本的项目结构梳理完成,接下来就首先开始动手开发项目的主要框架......