09|自研or借力(下):集成Gin替换已有核心
叶剑峰
该思维导图由 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
《手把手带你写一个 Web 框架》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(11)
- 最新
- 精选
- 友大家不要只看文章不看github的代码 很细节的放在文章中 很占篇幅 一般都是说个思路 然后自己去迁移 不过 github的代码有些细节没处理好 IRequest 很多方法其实已经删除了 但是接口定义还在 会让人迷糊 所以会有小伙伴说没有实现所有办法 这个得自己去判断思考的。 不过希望老师之后可以注意下
作者回复: 感谢提醒
2021-12-041 - 友作为 方法名叫做 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-06713
- 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-0723
- 芒果少侠迁移完成后,遇到testcase不通过的问题。 https://github.com/gin-gonic/gin/blob/21125bbb3f550dbfa4c64151f7e01f58dd64e2b8/context_test.go#L352 如果是这个testcase,修改正则中包路径那部分即可(与自己项目go module path保持一致即可)。2021-10-0953
- 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-0112
- i_chasehttp.request和response其实没有可扩展的,所以gin没有使用接口吧2022-06-141
- 🌿hade_request.go,hade_response.go,hade_context.go;类型、结构体、方法等命名可采用Object-C的前缀命名规则2022-04-291
收起评论