PHP转Go,框架选什么?

news2024/11/26 18:28:03

文章目录

  • 内功心法
  • PHP转Go,优选哪个框架?
    • 为什么?
    • 为什么不火?
  • GoFrame特点
    • 优势:
    • 劣势:
  • 框架选型
    • 谁适合用GoFrame
    • 谁不适合用GoFrame
  • GoFrame框架设计思想
  • 开发流程
    • 从0到1
    • 核心步骤
  • 总结
  • 视频
  • 一起学习

这是一期会引起广泛讨论的内容,不亚于“PHP是世界上最好的语言”。
在这里插入图片描述

内功心法

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

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

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

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

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

PHP转Go,优选哪个框架?

答案:GoFrame

为什么?

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

为什么不火?

对新手不友好,有门槛。

GoFrame特点

优势:

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

劣势:

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

框架选型

谁适合用GoFrame

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

谁不适合用GoFrame

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

GoFrame框架设计思想

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

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

  • 模块化设计

  • 统一框架设计
  • 工程开发设计
  • 全链路跟踪设计
  • 全错误堆栈设计
  • 接口化与泛型设计
  • 隐式与显式初始化
  • Context相关设计
  • 微服务相关设计

开发流程

我梳理的 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文件。

总结

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

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

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

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

视频

这期内容也录制了视频,视频更精彩,欢迎观看:B站视频链接

一起学习

欢迎在CSDN私信我,如果没能及时回复,欢迎扫下方公众号关注我:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/42517.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

即时通讯赛道开打信创牌,WorkPlus为何独树一帜?

近期,信创火了。 随着近期国家相关政策文件的推出,未来三年,党政信创、行业信创以及央国企信创的建设,将迎来全面加速。业内人士认为:“大信创”时代或已来临! 信创是什么? 信创,…

加载用户数据至用户维度表

目录 1.创建转换 2.配置表输入 3.配置表输入2 4.创建新转换 5.配置映射输入规范 6.配置数据库查询 7.配置数据库查询2 8.配置数据库查询3 9.配置过滤记录 10配置JavaScript代码 11.配置字段选择 12.配置映射输出规范 13.配置映射(子转换) 1…

JS进阶第一篇:手写call apply bind

文章目录手写call apply bind深入理解 call 方法手写call手写apply手写bind手写call apply bind 深入理解 call 方法 call 理解了,apply和bind就都迎刃而解了,他们都是大同小异。在此对call和apply不做过多的定义性解释,先来看下调用了call…

opencv阈值图像Threshold方法

图像阈值 固定阈值,自适应阈值,Otsu 二值化等 全局阈值和局部阈值 一、图像二值化 定义:图像的二值化,就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的只有黑和白的视觉效果。 灰度值0&…

热门Java开发工具IDEA入门指南——导出项目到Eclipse

IntelliJ IDEA,是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能是非常强大的。 上文…

打工人,这里有一份述职技巧,请查收

大家好,马上到年底了,有多少小伙伴正在期待着述职邮件,毕竟收到述职邮件,也就意味着有机会升职加薪。有没有跟糖糖一样,没收到邮件的? 工作要善于总结,也要善于表达,如何在限时内将…

跨平台应用开发进阶(四十)自定义插件及引用

文章目录一、前言二、插件制作三、离线插件集成应用示例四、拓展阅读一、前言 正如将可复用功能封装为自定义组件以供他人使用一样,在uni-app开发框架中提供了另一种形式的自定义插件,并可将该插件提交至uni-app插件市场。 二、插件制作 制作插件前&a…

前端 单元测试介绍 - 以及在项目中使用 (史上最全)

前言 我们前端开发过程中,编写测试代码,有以下这些好处: 更快的发现bug,让绝大多数bug在开发阶段发现解决,提高产品质量 比起写注释,单元测试可能是更好的选择,通过运行测试代码,观…

ARM 异常处理方式简单介绍

一、什么是异常 正常工作之外的流程都叫异常; 也就是说,除了用户模式和系统模式外,其他情况都是异常,见下图: 异常会打断正在执行的工作,并且一般我们希望异常处理完成后继续回来执行原来的工作&#xff…

3-azido-1-Propanamine,88192-19-2,3-叠氮基丙胺 性质特点有哪些?

●中文名:3-叠氮基丙胺,3-叠氮基-丙胺 ●英文名:3-azido-1-Propanamine ●外观以及性质: 西安凯新生物科技有限公司供应的:​3-azido-1-Propanamine为淡黄色或无色油状,含有叠氮基团,叠氮基可以…

Node.js 入门教程 23 使用 npm 的语义版本控制 24 卸载 npm 软件包 25 npm 全局或本地的软件包

Node.js 入门教程 Node.js官方入门教程 Node.js中文网 本文仅用于学习记录,不存在任何商业用途,如侵删 文章目录Node.js 入门教程23 使用 npm 的语义版本控制24 卸载 npm 软件包25 npm 全局或本地的软件包23 使用 npm 的语义版本控制 如果 Node.js 软件…

第147篇 笔记-预言机(Oracle)

定义:区块链预言机是将区块链连接到外部系统的实体,从而使智能合约能够基于现实世界的输入和输出执行。 预言机为分散的 Web3 生态系统提供了一种访问现有数据源、遗留系统和高级计算的方式。去中心化预言机网络(DON)支持创建混合…

[附源码]计算机毕业设计springboot“小世界”私人空间

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Java学历、技术哪个更重要?学历不好还能进大厂吗?

Java程序员的入行门槛并不高,并不看重你的学历和其他各方面,唯一看重的就是你技术是否过硬,能否独立参与到企业级开发的项目中去,说简单点入行只看技术。但是你如果想要长远发展服日后走上管理岗位,最好还是自考个本科…

使用 SwiftUI 构建可搜索列表,为您的 iOS 应用程序创建具有自动完成功能的可搜索列表(教程含源码)

设计新应用程序时面临的一大挑战是确保您的用户可以轻松浏览内容。如果体验太难或花费太多时间,无论您的内容有多好,很多用户都会转向另一个应用程序选项或放弃。 期望用户滚动浏览一长串选项是不切实际的,添加搜索功能可以极大地改善用户体验。更进一步,在用户键入时让列…

2.RabbitMQ安装

2.RabbitMQ安装 注意:安装时使用的系统是CentOS-7,MQ基本概念和RabbitMQ的相关知识请查看写的文章。 1、安装依赖环境 在线安装依赖环境: yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c kernel-devel…

17、Health Check 健康检查

强大的自愈能力是kubernetes容器编排引擎的重要特性。自愈的默认实现方式是自动重启发生故障的容器。除此之外,还可通过Liveness和Readiness探测机制设置更精细的健康检查,进而实现如下要求:零停机部署避免部署无效的镜像更加安全的滚动升级一…

有没有免费的视频剪辑软件?快来看看这些视频裁剪软件

我们有时候将视频拍好后,会觉得视频中有些画面的边缘出现了瑕疵,就想要将那些边缘裁剪掉,但是却不知道要怎么操作才能裁剪视频的画面。其实想要裁剪视频的画面很简单,我们只需要借助一些视频处理工具就可以实现裁剪视频画面的操作…

Swift 周报 第十八期 |技术汇总

前言 本期是 Swift 编辑组自主整理周报的第九期,每个模块已初步成型。各位读者如果有好的提议,欢迎在文末留言。 欢迎投稿或推荐内容。目前计划每两周周一发布,欢迎志同道合的朋友一起加入周报整理。 蝴蝶的生命之所以如此短暂&#xff0c…

解决git中出现的“fatal ‘xxxx‘ does not appear to be a git repository”错误的方法

今天来分享一下我在使用git中出现的一个错误提示,话不多说,我们直接来分析~ 这个错误是我在通过SSH方式pull远程仓库时候出现的,错误提示如下: fatal: xxx(你的仓库别名) does not appear to be a git repository fatal: Could n…