前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP转Go,框架选什么?

PHP转Go,框架选什么?

作者头像
王中阳Go
发布2023-01-06 15:02:11
9130
发布2023-01-06 15:02:11
举报
文章被收录于专栏:Go语言学习专栏Go语言学习专栏

http://mpvideo.qpic.cn/0b2e5qaaoaaasmadvi4eavrvb3gda7waabya.f10002.mp4?

这是一期会引起广泛讨论的内容, 不亚于“PHP是世界上最好的语言”。

内功心法

不管我们是否基于框架去开发,不管使用什么框架去开发。

6个字的内功心法一定要牢记:高内聚,低耦合

不管是单体项目还是微服务,不管是小组件还是大功能,不管是业务还是领域DDD,也都遵从这个原则:

(模块、功能、业务、领域)内部高内聚,

(模块、功能、业务、领域)之间低耦合。

PHP转Go,优选哪个框架?

答案:GoFrame

为什么?

和PHP的Laravel简直太像了,用起来太香了,很顺手。

为什么不火?

对新手不友好,有门槛。

GoFrame特点

优势:

  • 模块化
  • 高性能
  • 企业级

劣势:

  • 有学习门槛
  • 版本兼容性不好
  • 暂不支持微服务

框架选型

谁适合用GoFrame

  • PHP转Go(Laravel的同学会用起来很爽)
  • Java转Go (Spring Boot的同学会用起来很爽)
  • 比较复杂的企业级单体项目 (很规范,维护成本低,少踩很多坑)

谁不适合用GoFrame

  • 编程小白(容易被劝退)
  • 特别简单的项目用gin等轻量级框架(杀鸡焉用牛刀)
  • 非常复杂的分布式微服务项目用go-zero等微服务框架(没有任何一款框架是万能的)

GoFrame框架设计思想

这些不作为本期内容的重点,大家可以直接阅读官方文档。

我也有计划录制视频,结合我们的商业项目,站在使用者的角度去分享使用GoFrame的感受,如何理解框架的设计思想。

  • 模块化设计[1]
  • 统一框架设计[2]
  • 工程开发设计[3]
  • 全链路跟踪设计[4]
  • 全错误堆栈设计[5]
  • 接口化与泛型设计[6]
  • 隐式与显式初始化[7]
  • Context相关设计[8]
  • 微服务相关设计[9]

开发流程

我梳理的 GoFrame V2最新版的开发流程

从0到1

  1. 设计表结构
  2. 使用gf gen dao 生成对应的 dao/do/model
  3. 编写api层:定义业务侧数据结构,提供对外接口的输入/输出数据结构
  4. 编写model层:定义数据侧数据结构,提供对内的数据处理的输入/输出数据结构
  5. 编写logic层,自动生成service层代码。(通过配置goland File Watcher自动生成,也可以通过gf gen service手动执行脚本生成,建议前者)
  6. 在service层代码生成RegisterXX()方法后,在对应的logic模块注册服务(每个模块只需要写一次)
  7. 编写controller层,接收/解析用户输入的参数,调用service层的服务。
  8. 注册路由,对外暴露接口,比如这个项目是编写cmd.go文件。
  9. 在main.go中 加入一行 _ "project-name/internal/logic" (只需写一次)
  10. 在main.go中加入一行 _ "github.com/gogf/gf/contrib/drivers/mysql/v2" (如果你使用的是mysql;只需写一次)

核心步骤

  1. 编写api层:定义业务侧数据结构,提供对外接口的输入/输出数据结构
  2. 编写model层:定义数据侧数据结构,提供对内的数据处理的输入/输出数据结构
  3. 编写logic层,自动生成service层代码。(通过配置goland File Watcher自动生成,也可以通过gf gen service手动执行脚本生成,建议前者)
  4. 编写controller层,接收/解析用户输入的参数,调用service层的服务。
  5. 注册路由,对外暴露接口,比如这个项目是编写cmd.go文件。

总结

没有一个框架是万能的,也没有一个语言是万能的。

结合自己的需求去选择合适的框架,合适的开发语言。

不要被眼前暂时的得意或者失意“一叶障目”,结合实际情况,实事求是,拥抱变化,不断学习,才能“见泰山”。

面向“养家糊口”编程,能稳定赚钱的职业才是好职业。

参考资料

[1]模块化设计: https://goframe.org/pages/viewpage.action?pageId=3672891

[2]统一框架设计: https://goframe.org/pages/viewpage.action?pageId=7290658

[3]工程开发设计: https://goframe.org/pages/viewpage.action?pageId=30740161

[4]全链路跟踪设计: https://goframe.org/pages/viewpage.action?pageId=35356689

[5]全错误堆栈设计: https://goframe.org/pages/viewpage.action?pageId=35356691

[6]接口化与泛型设计: https://goframe.org/pages/viewpage.action?pageId=35356693

[7]隐式与显式初始化: https://goframe.org/pages/viewpage.action?pageId=6357066

[8]Context相关设计: https://goframe.org/pages/viewpage.action?pageId=7301813

[9]微服务相关设计: https://goframe.org/pages/viewpage.action?pageId=54100607

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-11-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员升级打怪之旅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 内功心法
  • PHP转Go,优选哪个框架?
    • 为什么?
      • 为什么不火?
      • GoFrame特点
        • 优势:
          • 劣势:
          • 框架选型
            • 谁适合用GoFrame
              • 谁不适合用GoFrame
              • GoFrame框架设计思想
              • 开发流程
                • 从0到1
                  • 核心步骤
                    • 参考资料
                • 总结
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档