手把手带你写一个 Web 框架
叶剑峰
腾讯高级工程师,前滴滴技术专家
22731 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 42 讲
特别放送 (1讲)
手把手带你写一个 Web 框架
15
15
1.0x
00:00/00:00
登录|注册

09|自研or借力(下):集成Gin替换已有核心

验证迁移结果
使用加法最小化和定制化需求
梳理已实现的模块
统一替换Gin库的引用地址
go mod引入和复制源码引入
确定Gin的迁移版本
要求包含著作权声明和许可协议声明
允许使用、复制、修改、出版发行、售卖软件及软件副本
Apache、BSD、GPL、LGPL、MIT、Mozillia
如何迁移
如何将Gin迁移进入框架
Gin框架的MIT许可证
开源许可证概述
借力开源项目的许可协议
集成Gin替换已有核心
自研or借力

该思维导图由 AI 生成,仅供参考

你好,我是轩脉刃。
在上一节课,比对了 Gin 框架和我们之前写的框架,明确框架设计的目标是,要设计出真正具有实用性的一个工业级框架,所以我们接下来会基于现有的比较成熟的 Gin 框架,并且好好利用其中间件的生态,站在巨人的肩膀,继续搭建自己的框架。

如何借力,讨论开源项目的许可协议

有的人可能就有点困惑了,这样借鉴其他框架或者其他库不是侵权行为吗?
要解答这个问题,我们得先搞清楚站在巨人肩膀是要做什么操作。借鉴和使用 Gin 框架作为我们的底层框架基本思路是,以复制的形式将 Gin 框架引入到我们的自研框架中,替换和修改之前实现的几个核心模块。
我们后续会在这个以 Gin 为核心的新框架上,进行其余核心或者非核心框架模块的设计和开发,同时我们也需要找到比较好的方式,能将 Gin 生态中丰富的开源中间件进行复制和使用。
现在我们再来回答是否侵权的问题,首先得了解开源许可证,并且知道可以对 Gin 框架做些什么操作?
开源社区有非常多的开源项目,每个项目都需要有许可说明,包含:是否可以引用、是否允许修改、是否允许商用等。目前的开源许可证有非常多种,每个许可证都是一份使用这个开源项目需要遵守的协议,而主流的开源许可证在 OSI 组织(开放源代码促进会)都有 登记最主流的开源许可证有 6 种:Apache、BSD、GPL、LGPL、MIT、Mozillia
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入讨论了在开发工业级框架时,选择集成成熟的Gin框架并利用其生态的优势。作者介绍了合法借鉴其他框架或库的方式,包括开源许可证的种类和对Gin框架的使用权限。随后,详细讨论了如何将Gin框架迁移至自己的框架中,包括使用go mod引入和复制源码的方式。最后,提出了思考如何将之前研发的定制化功能迁移到Gin框架上。文章重点介绍了如何在开发工业级框架时,借助成熟框架的力量,以及如何合法地进行技术借鉴和迁移。具体讨论了Gin框架中的Context、路由、中间件和重启机制,以及对Request和Response的封装。文章深入剖析了Gin框架的实现细节,为读者提供了宝贵的技术借鉴和迁移经验。文章还提到了对开源项目的许可协议的讨论,以及如何将自己的框架开源的思考。整体而言,本文对于开发工业级框架并进行技术迁移的过程进行了详细的阐述,为读者提供了宝贵的经验和思路。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一个 Web 框架》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(11)

  • 最新
  • 精选
  • 大家不要只看文章不看github的代码 很细节的放在文章中 很占篇幅 一般都是说个思路 然后自己去迁移 不过 github的代码有些细节没处理好 IRequest 很多方法其实已经删除了 但是接口定义还在 会让人迷糊 所以会有小伙伴说没有实现所有办法 这个得自己去判断思考的。 不过希望老师之后可以注意下

    作者回复: 感谢提醒

    2021-12-04
    1
  • 作为 方法名叫做 QueryAll 以及 Form 和 Param 这种方法 改变成 DefaultXXX 方法签名语义上并没有default的属性 老师这里是否可以修改下 还是说也是合理的

    作者回复: 有点没有理解,FormAll , QueryAll 这个语义上是没有Default的属性,参数也没有default的值,所以这个命名没问题吧

    2021-12-03
  • 宙斯
    有没有可能将gin封装一个provider,然后在封装的provider里面加container,这样就不用在gin源码上更改了呢?

    作者回复: 是可以的,主要能直接使用context来make容器中的服务出来,如果在gin外面再封装一层也是可以的。

    2021-11-23
  • 鸭补一生如梦
    现在定制的是 gin 的 1.7.3 版本,那么后续 gin 升级了,尤其是频繁升级,我们如何快速及时的进行升级更新? 或者说隔一段时间再更新?
    2021-10-06
    7
    13
  • 181
    --- FAIL: TestContextFormFileFailed (0.00s) panic: runtime error: invalid memory address or nil pointer dereference [recovered] panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0x6678d2] 这是啥原因
    2022-03-07
    2
    3
  • 芒果少侠
    迁移完成后,遇到testcase不通过的问题。 https://github.com/gin-gonic/gin/blob/21125bbb3f550dbfa4c64151f7e01f58dd64e2b8/context_test.go#L352 如果是这个testcase,修改正则中包路径那部分即可(与自己项目go module path保持一致即可)。
    2021-10-09
    5
    3
  • tiger
    感觉整合了gin有点没有了自己写一个框架的感觉,我还是选择了分开放,分别同步了两边的一些方法。示例的框架简陋是简陋,不过一路顺下来思路还是很清晰的,引入了gin有种思路被打断了的感觉。
    2023-08-12归属地:广东
    2
  • 木小柒
    DefaultQueryXXX 是不是没有实现 形如: foo.com?a=1&b=bar&c[]=bar 中 c 的获取? 我看 默认就支持 c=1&c=2&c=3 能获取到 c 的 slice [1, 2, 3] 但是 c[]=1&c[]=2&c[]=3 是获取不到的,除了自己解析不知道有没有更正常一点的方式
    2021-10-01
    1
    2
  • i_chase
    http.request和response其实没有可扩展的,所以gin没有使用接口吧
    2022-06-14
    1
  • 🌿
    hade_request.go,hade_response.go,hade_context.go;类型、结构体、方法等命名可采用Object-C的前缀命名规则
    2022-04-29
    1
收起评论
显示
设置
留言
11
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部