PHPer 转 Gopher 这一个月的体验~
上家公司离职后,歪打误着找了份Golang的工作,现在已入职开发Go一个月了,下面就分享下自己的心得哈,如有雷同纯属真实。
不习惯的地方
用习惯了PHP的JWT和Websocktd的第三方包和框架,再用Go相当于从0开始写,很多都要自定义。就拿Websocket来说,一搞就好几天,WebSocket花了差不多一周,如果对channel和协程不熟悉,估计还要更长。
把PHP面向对象的思维转到Go的结构体,另外结构体里还可以定义StructTag ,对于写久了PHP的人来说这应该算是颠覆性的重新学习了。
整体来说代码量比PHP多三分之一。习惯了Laravel的Migration/Event/Listerner等深度封装的东西,为了后面团队扩充方便,用Go实现分层这一块也花了不少时间,差不多一周吧。
nil这块写多了会别扭,不过仁者见仁智者见智,我觉得还可以接受,就跟try/catch一样
再来说说爽的地方
Go的简单易懂真的上手很快,之前大约是2周时间就学完并开始做项目了,对于初学者来说,甚至都不用学协程和channel等概念也可以直接上手(除非项目用到)
强类型这点也爽。不用担心项目会有什么隐藏的坑,基本上能编译通过上线就不会有问题,这一点让我很放心,换成是PHP团队,一个PHPer新手埋下了坑估计都够找很久了(这一点以前遇到过),所以以后项目也不用担心维护的坑问题
第三方包和扩展已经很多了,Gitee的统计Go的第三方已经排行第三,足够做WEB和API用了,目前还没发现项目里还有不能满足的扩展。
说说基本一致的地方
- Go Mod和Composer一样好用
- Go的开发效率约等于PHP,这周下班前我大约做了业务级别的6个API接口,换成PHP也差不多,所以不用担心写Go的效率
- 部署也基本一致,写了几个命令实现一键部署,没有想象中麻烦。
- 性能老实说Swoole是稍微比go高的,我之前做的双核压测是高1000左右,不过到了一定的量级,最主要的瓶颈是在IO(数据库/Redis)了,所以这里我把它当成约等于一致。
分享下目前技术栈
- Gin+Gorm
- WebSocket + gRPC
- Redis / Mysql
下一份工作还会继续做Golang吗?
应该还会,不过很看好hyperf这个框架,类laravel的写法,而且性能还不错,也会优先考虑
交流
话说,如果各位大佬有go的交流学习群私信我哈,一起学习加油。
老哥几年经验
hyperf吊炸天
大佬 转PHP之后。薪资有没有降呀 :grin:
拿go写web的还是少,要不然也不会啥轮子也没有
别转回来了,再走走会有另外更好的世界等着你
go也并不是编译好就不会出错,我目前就遇到了协成中报错,整个进程都挂了
最近也看了go,拿go来写web,还是累,没轮子,而且工作选择少。除非目前工作php转型go,不然不适合。
学习了
转go的路上很正常,尽量多接触很多语言
用go去写web,如果你去调弱类型的语言的接口,真的是坑。因为你不知道他们啥时候会给你返回个啥类型 今天可能是
id;"12"
过几天就是id;12
,这个还好,最坑的就是null
,弱类型出来的数据不判断,数据库读出来直接返回,{"list":null}
,你不得不提醒对方,给你强转一下,或者你去用interface
hyperf真的不错 可大可小 在你需要的时候就能扩展