Golang Go语言 新 Idea PHP 转 GO 福音

发布于 1周前 作者 htzhanglong 来自 Go语言

Golang Go语言 新 Idea PHP 转 GO 福音

最近两周一直在做公司的 Go 项目,从 PHP 转 Go 是一个不算那么痛苦的精力,今天就来讲讲这两周的体会吧。

背景

  • 我们是长期使用 php 并且实现了 swoole service 架构的服务
  • 随着长时间的维护,发现了 php 这种野路子开发快,但是规范上真的差
  • 业务的复杂度和规范性越来越成了一个维护难题
  • 小组学习 Go 相关内容

过程

  • 为了减少趟坑造成巨大损失,只能找一些不太重要的小项目进行重构。
  • 对于一个从 PHP 转 Go 最大的难题就是规范性。
    • 数据类型的定义要求
    • 资源业务的抽象
    • 单元测试的编写

对于一个被 PHP 养成的一个懒汉来说,初期真的是痛苦无比,但是慢慢的我发现,其实 Go 的设计模式就是为了在规范和速度上取一个平衡,开始我是一点一点写的,后来发现各种的包可以大大缩短我们早轮子的时间,轮子小还可以自己改,所以我就萌生了一个想法。自己做一个脚手架,自动代码生成。做为一个懒散的程序员这就是福音。

优化

  • 我们选择的是 Gin 框架,原因是轻量,我觉得没什么比轻量可控更好的选择了。
  • Restful 协议真的是好东西,规范可自动生成不错的选择
  • 并不需要高深的代码套路,curd 模板直接保存文件

结果

总结

感觉 go 真的真的很不错,在快速和规范中有一个舒适的平衡点。后续加上 docker,在弄个 k8s 稳稳的后端,前端的事就叫前端去做吧!业余时间快乐的玩耍。还有欢迎提各种 pr 集思广益。


更多关于Golang Go语言 新 Idea PHP 转 GO 福音的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

71 回复

“随着长时间的维护,发现了 php 这种野路子开发快,但是规范上真的差” —— 人或者管理有问题

更多关于Golang Go语言 新 Idea PHP 转 GO 福音的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


#1 项目时间拉到 3-5 年,一波一波人来人去真的不是说能管理的的好的,毕竟人的水平是稂莠不齐的,真的很难规范。毕竟 php 就是以快速灵活号称的,对于一些发展长远的公司来说,都是会摒弃的。太多的大公司越来越不待见 php 了

"数据类型的定义要求
资源业务的抽象
单元测试的编写"
这些跟语言没关系吧

项目的规范受影响方面太多,这一方面弱类型语言也确实比强类型差
人员频繁变动和个人开发者的水平,需求合理性,项目紧急性等。。。

#3 完全有关系 php 你就不会定义一个结构体,Go 里面你不定义好结构体就不能玩了 你可以用下体会体会,感觉从语言的设计路上他们就是有天然的区别的,比如 php 就是想让你懒,想让你随性,想让你慢慢的爱上他,最后你发现这就是溺爱啊,我觉得 php 设计者真的太坏了

福音:转 dotnet core

服务端用 PHP 和 Node.js 都有同一个问题,不同水平的人写出来的东西相差太多。不像 JAVA 这种强类型语言容易形成团队规范,更容易协作。
如果团队水平够的话,PHP、Node.js 都可以写出漂亮易于维护并高效的工程。

#7 是这个道理,就像我写 php 的时候我是万万不会写单元测试的,以你为我太懒了,但是在 Go 里你代码不写单元测试,你线上完全不能改,只能硬抗这个 bug,不得已我也开始写单元测试了,写了发现也太好了吧,直接 ide 运行监测,只要单元测试都过关,整个程序也不会出什么问题,这就是语言层面带来的一些好处,真的感触挺深

随着长时间的维护,发现了 go 这种野路子在快速和规范中舒适平衡点,越来越不平衡了同时也不舒适了

#9 哈哈 比 PHP 强点

居然不用 go mod. 新项目很少不用 go mod 的了吧?

为什么 go 不写单元测试线上不能改啊?

说到底楼主是喜欢上 GO 了,即使明明是管理问题,全懒在 PHP 身上了。

少扯淡,任何问题从根源上说都可以说是人的问题,但是人是会利用工具的生物,工具好坏能决定生产效率,语言是工具的一种

同样的工具(语言)有的团队用得好,有的团队用的差。不是人的问题是谁的问题?

easyGin 现在不是有 go module 管理包了吗,我看你把整个 vendor 都传上去了。

楼主怎么没提性能 是提升不大吗

呵呵,抛开历史包袱,用啥都是爽。写了 3-5 年,换了几波人再来说。你看过 10 几年的项目就知道了,什么语言都是扯,一坨坨的代码乱的不行。

[是在 Go 里你代码不写单元测试,你线上完全不能改]为啥不能改?是不敢改吧,PHP 也有单测呀,改完单测都过了,上线心不慌(这个和语言有啥关系)。现在哪个语言没单测,哪个语言不能 IDE 运行检测?

你可能是需要企业级业务框架,给你规定的死死的只能这样搞,这个哪个语言都有

我也理解不了这种莫名其妙对 PHP 的吐槽。 就你这个 GO 的项目,只要管理不到位 代码质量一样。。

PHP 野路子?用了 Go 就规范了?主观客观原因可以分析下嘛?请问 LZ 对自己的 PHP 学的是什么样的深度可以做个总结嘛?

https://github.com/xiangdong1987/easyGin/blob/master/test/scffold_test.go#L12
就你这单测写的,用啥语言都一样
调用一个方法还有会失败的吗?测试、调试全靠输出?
func TestGenerateCURD(t *testing.T) {
println(scaffold.GenerateCURD(“Person”, “id”))
}

就问你,写 php 不写单元测试,换了 go 就写了,这是什么问题?

#12 PHP 可以直接改代码 go 是需要重新编译在提交代码 可能我说的不太清楚

#21 看样子对我意见很大啊,来来欢迎来提 pr go 还没上代码覆盖那套呢 输出就够了 你提醒我了 下一步上代码测试覆盖

#16 用的 govender go mod 还没了解最忌你一直在 curd 回去学习学习

#1 可以认为,一个有针对性设计的语言,已经帮你做了一部分规范和管理工作。

“随着长时间的维护,发现了 php 这种野路子开发快,但是规范上真的差”

随着长时间的维护,Golang 代码也一样可以一坨屎,语法上的限制并没有啥用

问题当然都是人的问题,只是人的问题有时候不好解决,于是就用工具弥补人的问题。

比如人的问题就是不喜欢面对事实,事实是有些语言确实更容易用出问题,大家都很明白这点,但是就是要硬着头皮说都是人的问题,仿佛他平时用得很顺当一样,完全忘了遇到时候自己是怎么吐槽的。

没错,再好的工具都会被人用烂,但没那么烂也是好些。

golang 依赖总是下不下来啊,怎么建立私有仓库? dep 这东西一出来就要死了?

> “随着长时间的维护,发现了 php 这种野路子开发快,但是规范上真的差”

我之前也是写 php 的,现在也是写 Go 的

规范真的差,只能说明 你们当初领导或者项目主导者 根本 没有管理的意识 我记得当时我们写 php 的项目,用的 Laravel 框架, 大家规定使用 PSR 规范 (好像是 PSR-4) 不知道的,当时我们自己看, 然后项目里, 我们先把项目分好模块,然后拆分好,
比如在 model 层中拆出 Repository, 这里专写 model 操作,以前 model 里 只有数据结构和关联关系! 把 controller 拆出 service 层等等, 还有入口表单校验 和出口数据格式化, 都分好模块, 后续加入的同事 只要根据这个规则写, 一旦有问题,方便查错!

即使用了 Go,大家不按照规矩来,一样还是乱的… 跟语言关系真的不是很大!

比如 你们这个脚手架里 文件有大写的,有小写的, 注释有直接中文的,又有英文的… 跟人有关, 别怪语言了…

同 php,我也想转 go。但是做 Go 的话,小一点的城市是完全没有就业机会的,悲伤的故事

#31 完全赞同对于人的管理可以做到良好的代码框架和使用规范,我并不是抨击 PHP 是不好的语言,我反而会说写业务逻辑 PHP 是最好的语言不接受任何反驳,我只是想说语言在设计的出发点上就有所不同,像 PHP 是削减了程序员的心智负担让,程序员更多的精力放在逻辑的编写上,这种出发点是好的,但是对于程序员本身的发展,有可能是一个陷阱,沉迷也简单的东西无法自拔,而有些语言设计上考虑的可能比较平衡,在上手难度和规范上做了一个平衡,其实 GO 的主要强项是 goroutine CSP 编程,是高效的使用多线程,降低程序员对于多线程编程的心智负担,每个语言都是有每个语言的优劣,我只能说我真没抨击语言

php 写不好,我感觉你们 go 也一样写不好。

因为编码规范而换语言?

编码规范和语言有关系吗?

任何问题从根源上说都是人的问题,然而优秀的工具能够挽救水平不怎么样的人,让它发挥在平均线附近。当然我知道技术 geeker 们只喜欢那种能对高手增幅超多的工具,不会用用不好就可以说那是人的问题了。全然不顾现代软件工程的意义就是让更多“水平不怎么样的人也能写代码”

因为在楼主的应用场景里,PHP 明显更自由,因此楼主他们可以不写单元测试就上线,换了 Go 变成了不得不写。所以你看,“约定”无法代替“约束”,你当然可以说他们人有问题;工具这东西就是用来解决人的问题的

没有关系,但区别是有的语言可以用报错拒不执行逼着你执行编码规范,而有的语言则决定给用户“更多自由”,哪个更好就见仁见智

#24 很遗憾,你这样写覆盖率会很高,然而并不能达到测试的目的

#39 哈哈 知道我没用断言 毕竟 PHP 养成的习惯一时半会改起来还挺痛苦,这个痛苦就是我想说的也感谢 理解万岁

#40 说实话别给 PHP 招黑了,这些习惯不是语言的问题,而是个人和工作环境的问题

我是从 asp 做到 PHP 然后到 .net core 的,写了至少七年 PHP,也没有养成不用断言硬说是测试的“习惯”

实事求是脚踏实地才是硬道理,别把锅甩给语言

你这回复,我表示赞同。

其实,PHP 7 已经支持 参数和函数返回值类型声明, 数据类型的定义完全可以像某些静态语言一样

至于资源业务的抽象,这不是考验编写代码的人吗?设计模式 /框架 /架构

单元测试就更不用说了,只要你愿意写,都是有的

#41 我同意我这个人就是有点懒,没办法人性嘛就是趋利避害嘛。我只是感受到了危险而已,不给自己找借口了,还是多点时间去码代码吧!

PHP 7 支持类型定义等等,和按照规范来写和强类型语言没有基本什么区别了;
GO 的话适合些各种并发应用的服务端,比如自己实现 web server,websocket server, client manager,还有就是需要打包的小程序,比如 lantern,goproxy,frp 之类
相比 Python,我更喜欢 Typescript,.net core,golang 甚至 PHP,无赖 Python,java,c 历史太悠久了。
简单的 restful 个人觉得还是用 django restful framework 自动生成好了,对性能要求高点可以用 go,对 PHP 熟悉可以用 YII 都是框架自动生成。

golang 里有 template, 而不是用你这种字符串拼接来生成模板

用 go 的容易遇到猪队友

与其拼命夸语言,不如推荐点应用该语言的大神让大家学习了解一下。

这和语言没有关系,只和开发人员有关系,更和速成班有关系。我见过写的一坨翔的 JAVA 代码,难道是 JAVA 语言有问题?

需要都是相通的,来学微服务呀

http://github.com/overnote/golang/tree/master/12-Go 与微服务

你们这些人啊,人家就是想说 PHP 与 GO 语言在设计上的区别, 在语言层次上 Go 比 PHP 的确具有规范性, PHP7 出了这么久,你们这些使用 PHP7 在自己项目有全部用类型定义,还不是使用 PHP5 时代那一套。
任何编程语言都是给程序员使用的, 所以无论使用啥语言,最后还是归结到人身上, 注意审题.

我觉得不用说楼主了 楼主只是使用新语言的后新鲜感罢了

我写 go 一律无脑 interface 路过,真香!

不过还好只是写点自己用的工具,
这种代码别人肯定是无法接手的,
2333333333

路子野写什么语言都野。PHP 主要还是从业者平均水平偏低,土法炼钢玩惯了,规范化在团队内推广不开。

说到底,这个锅 php 不背。公司考虑使用 php 就应该考虑到这个问题,如果是规范问题,那么管理者应该给出一套自己的合作书写管理规范,比如统一使用驼峰,比如,之后要有空格,比如写完之后必须要有 unit 代码上到 git 会有脚本进行判断。
说到底,时间紧,任务重。都是借口,写 go 的时候,你也可以安装 php 的写法去搞,无非是怎么来的怎么挂回去,而 php 不会让你挂回去。。。我们在享受人家便利性的同时也不要一味的说人家不好

我先不说语言的“优劣”,语言只是工具,用来赚钱的就是好语言。要不是 PHP 的草根语言,多少草根公司能够活到有人来浇水啊,多少公司就三五条枪,要不是靠着 PHP 帮你跑马圈地才活到下一个阶段。这次让公司活过了头七,有点钱了,能多招几条兵了,开始讲排面吹牛逼了,开始扯 PHP 没有其他语言有“脸面”了,为啥这时候不下功夫把自己一开始乱搞的一坨坨 PHP 治理一下呢。

用 PHP 一时爽,一直用 PHP 一直爽(

搭车问一下大佬,现在 dotnet Core 做小型 CRUD 网站 ( 数据库 mysql ) 的技术栈是什么?
前端用 Razor 模板引擎吗,有像 Procedural PHP 一样直接简单组装 sql 作 crud 的路子吗,如果没有则 ORM 可以用哪个

Asp.Net Core 全家桶,数据库用 EF Core ( MySQL 需要安装 Pomelo.EntityFrameworkCore.MySql / Mysql.Data.EntityFrameworkCore 驱动)

EF 也可以直接写 SQL (要准备好 Model 以用于 SELECT 等操作)

如果用不惯 EF,可以用 NHibernate

一定要纯 SQL 的话,可以考虑直接用 Mysql.Data / MySqlConnector

var ModelPath = "d:/data/go/src/easyGin/models/"
var RouterPath = "d:/data/go/src/easyGin/router/"
var ApiPath = "d:/data/go/src/easyGin/handle/"

这?

就是 纯 sql 结果读取+展示,让网站跑起来 model 层直接跳过,用 数据库 直接抓出来数据 展示
( 就是 极简陋 PHP 留言板的 toy demo 的感觉 ) 不用 model
当然这个流程是很不规范的 有没有什么教程可以参考

哈哈 时间紧任务重一个人好累 哈哈

#61 看 Mysql.Data 或者 MySqlConnector 的官方文档,里面有范例

#61 另外可以不用 Razor,这样就不需要 ViewModel 层,asp net core 官方 simple / template 有

楼主惨了,公然引战。

PHP 是世界上最好的语言

说到底是动态类型和静态类型的区别

#30 go mod proxy 了解一下 项目已经上 go mod

php 是世界上最好的语言,别打我

土法炼钢 …… 你这词太。。。

针对“Golang Go语言 新Idea PHP转GO福音”的帖子,作为IT领域Go语言方面的专家,以下是我的专业回复:

PHP转Go确实为开发者们带来了新的机遇和挑战。Go语言(Golang)以其简洁的语法、高效的性能、内置的并发机制以及强大的标准库,在Web开发、系统编程等多个领域展现出强大的竞争力。

对于从PHP转Go的开发者来说,首先需要熟悉Go语言的基本语法和特性,了解其与PHP在变量声明、数据类型、控制结构、函数定义等方面的差异。同时,要充分利用Go语言的并发编程优势,提升程序的执行效率和响应速度。

在转换过程中,建议逐行分析PHP代码,并根据Go语言的语法规则进行相应的调整和优化。此外,还可以借助Go语言的丰富标准库和第三方库,快速构建稳定、高效的应用程序。

总之,从PHP转到Go语言是一个值得尝试的过程,它将为开发者们带来全新的编程体验和更高的开发效率。希望每一位转型的开发者都能在这个过程中不断成长和进步。

回到顶部