最近两周一直在做公司的 Go 项目,从 PHP 转 Go 是一个不算那么痛苦的精力,今天就来讲讲这两周的体会吧。
对于一个被 PHP 养成的一个懒汉来说,初期真的是痛苦无比,但是慢慢的我发现,其实 Go 的设计模式就是为了在规范和速度上取一个平衡,开始我是一点一点写的,后来发现各种的包可以大大缩短我们早轮子的时间,轮子小还可以自己改,所以我就萌生了一个想法。自己做一个脚手架,自动代码生成。做为一个懒散的程序员这就是福音。
感觉 go 真的真的很不错,在快速和规范中有一个舒适的平衡点。后续加上 docker,在弄个 k8s 稳稳的后端,前端的事就叫前端去做吧!业余时间快乐的玩耍。还有欢迎提各种 pr 集思广益。
//开启mod
export GO111MODULE=on
//设置代理
export GOPROXY=https://gocenter.io
1
ztxcccc 2019-07-26 13:17:42 +08:00 9
“随着长时间的维护,发现了 php 这种野路子开发快,但是规范上真的差” —— 人或者管理有问题
|
2
xiangdong1987 OP @ztxcccc #1 项目时间拉到 3-5 年,一波一波人来人去真的不是说能管理的的好的,毕竟人的水平是稂莠不齐的,真的很难规范。毕竟 php 就是以快速灵活号称的,对于一些发展长远的公司来说,都是会摒弃的。太多的大公司越来越不待见 php 了
|
3
Binks 2019-07-26 13:25:18 +08:00
"数据类型的定义要求
资源业务的抽象 单元测试的编写" 这些跟语言没关系吧 |
4
ben1024 2019-07-26 13:26:33 +08:00
项目的规范受影响方面太多,这一方面弱类型语言也确实比强类型差
人员频繁变动和个人开发者的水平,需求合理性,项目紧急性等。。。 |
5
xiangdong1987 OP @Binks #3 完全有关系 php 你就不会定义一个结构体,Go 里面你不定义好结构体就不能玩了 你可以用下体会体会,感觉从语言的设计路上他们就是有天然的区别的,比如 php 就是想让你懒,想让你随性,想让你慢慢的爱上他,最后你发现这就是溺爱啊,我觉得 php 设计者真的太坏了
|
6
agdhole 2019-07-26 13:31:22 +08:00 1
福音:转 dotnet core
|
7
nigelvon 2019-07-26 13:32:52 +08:00
服务端用 PHP 和 Node.js 都有同一个问题,不同水平的人写出来的东西相差太多。不像 JAVA 这种强类型语言容易形成团队规范,更容易协作。
如果团队水平够的话,PHP、Node.js 都可以写出漂亮易于维护并高效的工程。 |
8
xiangdong1987 OP @nigelvon #7 是这个道理,就像我写 php 的时候我是万万不会写单元测试的,以你为我太懒了,但是在 Go 里你代码不写单元测试,你线上完全不能改,只能硬抗这个 bug,不得已我也开始写单元测试了,写了发现也太好了吧,直接 ide 运行监测,只要单元测试都过关,整个程序也不会出什么问题,这就是语言层面带来的一些好处,真的感触挺深
|
9
askfilm 2019-07-26 13:40:36 +08:00 1
随着长时间的维护,发现了 go 这种野路子在快速和规范中舒适平衡点,越来越不平衡了同时也不舒适了
|
10
xiangdong1987 OP @askfilm #9 哈哈 比 PHP 强点
|
11
skiy 2019-07-26 13:43:41 +08:00
居然不用 go mod. 新项目很少不用 go mod 的了吧?
|
12
laojiaqing 2019-07-26 13:56:26 +08:00
@xiangdong1987 为什么 go 不写单元测试线上不能改啊?
|
13
Felldeadbird 2019-07-26 13:58:18 +08:00
说到底楼主是喜欢上 GO 了,即使明明是管理问题,全懒在 PHP 身上了。
|
14
abcbuzhiming 2019-07-26 13:58:24 +08:00
@ztxcccc 少扯淡,任何问题从根源上说都可以说是人的问题,但是人是会利用工具的生物,工具好坏能决定生产效率,语言是工具的一种
|
15
victor 2019-07-26 14:04:01 +08:00
@abcbuzhiming 同样的工具(语言)有的团队用得好,有的团队用的差。不是人的问题是谁的问题?
|
16
alexmy 2019-07-26 14:11:11 +08:00
easyGin 现在不是有 go module 管理包了吗,我看你把整个 vendor 都传上去了。
|
17
haohappy 2019-07-26 14:14:05 +08:00
楼主怎么没提性能 是提升不大吗
|
18
iyaozhen 2019-07-26 14:14:44 +08:00 via Android 1
呵呵,抛开历史包袱,用啥都是爽。写了 3-5 年,换了几波人再来说。你看过 10 几年的项目就知道了,什么语言都是扯,一坨坨的代码乱的不行。
[是在 Go 里你代码不写单元测试,你线上完全不能改]为啥不能改?是不敢改吧,PHP 也有单测呀,改完单测都过了,上线心不慌(这个和语言有啥关系)。现在哪个语言没单测,哪个语言不能 IDE 运行检测? 你可能是需要企业级业务框架,给你规定的死死的只能这样搞,这个哪个语言都有 |
19
lifeintools 2019-07-26 14:15:25 +08:00
我也理解不了这种莫名其妙对 PHP 的吐槽。 就你这个 GO 的项目,只要管理不到位 代码质量一样。。
|
20
N1ceHua 2019-07-26 14:26:04 +08:00
PHP 野路子?用了 Go 就规范了?主观客观原因可以分析下嘛?请问 LZ 对自己的 PHP 学的是什么样的深度可以做个总结嘛?
|
21
iyaozhen 2019-07-26 14:30:02 +08:00
https://github.com/xiangdong1987/easyGin/blob/master/test/scffold_test.go#L12
就你这单测写的,用啥语言都一样 调用一个方法还有会失败的吗?测试、调试全靠输出? func TestGenerateCURD(t *testing.T) { println(scaffold.GenerateCURD("Person", "id")) } |
22
ztxcccc 2019-07-26 14:36:44 +08:00
@abcbuzhiming 就问你,写 php 不写单元测试,换了 go 就写了,这是什么问题?
|
23
xiangdong1987 OP @laojiaqing #12 PHP 可以直接改代码 go 是需要重新编译在提交代码 可能我说的不太清楚
|
24
xiangdong1987 OP @iyaozhen #21 看样子对我意见很大啊,来来欢迎来提 pr go 还没上代码覆盖那套呢 输出就够了 你提醒我了 下一步上代码测试覆盖
|
25
xiangdong1987 OP @alexmy #16 用的 govender go mod 还没了解最忌你一直在 curd 回去学习学习
|
27
xiangdong1987 OP @N1ceHua #20 php 可以看看 这个 https://github.com/xiangdong1987/tinys
|
28
oneonesv 2019-07-26 15:38:05 +08:00 1
“随着长时间的维护,发现了 php 这种野路子开发快,但是规范上真的差”
随着长时间的维护,Golang 代码也一样可以一坨屎,语法上的限制并没有啥用 |
29
nguoidiqua 2019-07-26 15:51:01 +08:00 via Android
问题当然都是人的问题,只是人的问题有时候不好解决,于是就用工具弥补人的问题。
比如人的问题就是不喜欢面对事实,事实是有些语言确实更容易用出问题,大家都很明白这点,但是就是要硬着头皮说都是人的问题,仿佛他平时用得很顺当一样,完全忘了遇到时候自己是怎么吐槽的。 没错,再好的工具都会被人用烂,但没那么烂也是好些。 |
30
cheneydog 2019-07-26 15:53:39 +08:00
golang 依赖总是下不下来啊,怎么建立私有仓库? dep 这东西一出来就要死了?
|
31
ylsc633 2019-07-26 15:54:56 +08:00 1
> "随着长时间的维护,发现了 php 这种野路子开发快,但是规范上真的差"
我之前也是写 php 的,现在也是写 Go 的 规范真的差,只能说明 你们当初领导或者项目主导者 根本 没有管理的意识 我记得当时我们写 php 的项目,用的 Laravel 框架, 大家规定使用 PSR 规范 (好像是 PSR-4) 不知道的,当时我们自己看, 然后项目里, 我们先把项目分好模块,然后拆分好, 比如在 model 层中拆出 Repository, 这里专写 model 操作,以前 model 里 只有数据结构和关联关系! 把 controller 拆出 service 层等等, 还有入口表单校验 和出口数据格式化, 都分好模块, 后续加入的同事 只要根据这个规则写, 一旦有问题,方便查错! 即使用了 Go,大家不按照规矩来,一样还是乱的... 跟语言关系真的不是很大! 比如 你们这个脚手架里 文件有大写的,有小写的, 注释有直接中文的,又有英文的..... 跟人有关, 别怪语言了.. |
32
set01 2019-07-26 15:57:12 +08:00
同 php,我也想转 go。但是做 Go 的话,小一点的城市是完全没有就业机会的,悲伤的故事
|
33
xiangdong1987 OP @ylsc633 #31 完全赞同对于人的管理可以做到良好的代码框架和使用规范,我并不是抨击 PHP 是不好的语言,我反而会说写业务逻辑 PHP 是最好的语言不接受任何反驳,我只是想说语言在设计的出发点上就有所不同,像 PHP 是削减了程序员的心智负担让,程序员更多的精力放在逻辑的编写上,这种出发点是好的,但是对于程序员本身的发展,有可能是一个陷阱,沉迷也简单的东西无法自拔,而有些语言设计上考虑的可能比较平衡,在上手难度和规范上做了一个平衡,其实 GO 的主要强项是 goroutine CSP 编程,是高效的使用多线程,降低程序员对于多线程编程的心智负担,每个语言都是有每个语言的优劣,我只能说我真没抨击语言
|
34
AngryPanda 2019-07-26 16:08:30 +08:00
php 写不好,我感觉你们 go 也一样写不好。
|
35
mrgeneral 2019-07-26 16:10:40 +08:00
因为编码规范而换语言?
编码规范和语言有关系吗? |
36
abcbuzhiming 2019-07-26 16:19:07 +08:00 1
@victor 任何问题从根源上说都是人的问题,然而优秀的工具能够挽救水平不怎么样的人,让它发挥在平均线附近。当然我知道技术 geeker 们只喜欢那种能对高手增幅超多的工具,不会用用不好就可以说那是人的问题了。全然不顾现代软件工程的意义就是让更多“水平不怎么样的人也能写代码”
|
37
abcbuzhiming 2019-07-26 16:24:11 +08:00 1
@ztxcccc 因为在楼主的应用场景里,PHP 明显更自由,因此楼主他们可以不写单元测试就上线,换了 Go 变成了不得不写。所以你看,“约定”无法代替“约束”,你当然可以说他们人有问题;工具这东西就是用来解决人的问题的
|
38
abcbuzhiming 2019-07-26 16:25:40 +08:00
@mrgeneral 没有关系,但区别是有的语言可以用报错拒不执行逼着你执行编码规范,而有的语言则决定给用户“更多自由”,哪个更好就见仁见智
|
39
chinvo 2019-07-26 16:28:07 +08:00 via iPhone
@xiangdong1987 #24 很遗憾,你这样写覆盖率会很高,然而并不能达到测试的目的
|
40
xiangdong1987 OP @chinvo #39 哈哈 知道我没用断言 毕竟 PHP 养成的习惯一时半会改起来还挺痛苦,这个痛苦就是我想说的也感谢 @abcbuzhiming 理解万岁
|
41
chinvo 2019-07-26 16:36:26 +08:00 via iPhone 2
@xiangdong1987 #40 说实话别给 PHP 招黑了,这些习惯不是语言的问题,而是个人和工作环境的问题
我是从 asp 做到 PHP 然后到 .net core 的,写了至少七年 PHP,也没有养成不用断言硬说是测试的“习惯” 实事求是脚踏实地才是硬道理,别把锅甩给语言 |
42
victor 2019-07-26 16:37:39 +08:00
@abcbuzhiming 你这回复,我表示赞同。
|
43
bugsnail 2019-07-26 17:15:33 +08:00
其实,PHP 7 已经支持 参数和函数返回值类型声明, 数据类型的定义完全可以像某些静态语言一样
至于资源业务的抽象,这不是考验编写代码的人吗?设计模式 /框架 /架构 单元测试就更不用说了,只要你愿意写,都是有的 |
44
xiangdong1987 OP @chinvo #41 我同意我这个人就是有点懒,没办法人性嘛就是趋利避害嘛。我只是感受到了危险而已,不给自己找借口了,还是多点时间去码代码吧!
|
45
encro 2019-07-26 18:24:58 +08:00
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 都是框架自动生成。 |
46
shingle 2019-07-26 18:39:03 +08:00
golang 里有 template, 而不是用你这种字符串拼接来生成模板
|
47
impl 2019-07-26 19:18:26 +08:00 via Android
用 go 的容易遇到猪队友
|
48
mamahaha 2019-07-26 19:36:28 +08:00
与其拼命夸语言,不如推荐点应用该语言的大神让大家学习了解一下。
|
49
v2hub 2019-07-26 19:45:15 +08:00
这和语言没有关系,只和开发人员有关系,更和速成班有关系。我见过写的一坨翔的 JAVA 代码,难道是 JAVA 语言有问题?
|
50
ruyuejun 2019-07-26 19:45:37 +08:00 via iPhone
|
51
lsls931011 2019-07-26 19:46:47 +08:00
你们这些人啊,人家就是想说 PHP 与 GO 语言在设计上的区别, 在语言层次上 Go 比 PHP 的确具有规范性, PHP7 出了这么久,你们这些使用 PHP7 在自己项目有全部用类型定义,还不是使用 PHP5 时代那一套。
任何编程语言都是给程序员使用的, 所以无论使用啥语言,最后还是归结到人身上, 注意审题. |
52
JaguarJack 2019-07-26 19:48:07 +08:00 via iPhone
我觉得不用说楼主了 楼主只是使用新语言的后新鲜感罢了
|
53
zjsxwc 2019-07-26 20:00:17 +08:00 via Android
我写 go 一律无脑 interface 路过,真香!
不过还好只是写点自己用的工具, 这种代码别人肯定是无法接手的, 2333333333 |
54
towser 2019-07-26 20:30:00 +08:00 1
路子野写什么语言都野。PHP 主要还是从业者平均水平偏低,土法炼钢玩惯了,规范化在团队内推广不开。
|
55
c466934322 2019-07-26 20:39:41 +08:00
说到底,这个锅 php 不背。公司考虑使用 php 就应该考虑到这个问题,如果是规范问题,那么管理者应该给出一套自己的合作书写管理规范,比如统一使用驼峰,比如,之后要有空格,比如写完之后必须要有 unit 代码上到 git 会有脚本进行判断。
说到底,时间紧,任务重。都是借口,写 go 的时候,你也可以安装 php 的写法去搞,无非是怎么来的怎么挂回去,而 php 不会让你挂回去。。。我们在享受人家便利性的同时也不要一味的说人家不好 |
56
Ann5527 2019-07-26 23:43:38 +08:00 1
我先不说语言的“优劣”,语言只是工具,用来赚钱的就是好语言。要不是 PHP 的草根语言,多少草根公司能够活到有人来浇水啊,多少公司就三五条枪,要不是靠着 PHP 帮你跑马圈地才活到下一个阶段。这次让公司活过了头七,有点钱了,能多招几条兵了,开始讲排面吹牛逼了,开始扯 PHP 没有其他语言有“脸面”了,为啥这时候不下功夫把自己一开始乱搞的一坨坨 PHP 治理一下呢。
|
57
KasuganoSoras 2019-07-26 23:51:25 +08:00 1
用 PHP 一时爽,一直用 PHP 一直爽(
|
58
charlie21 2019-07-27 09:35:38 +08:00
@chinvo 搭车问一下大佬,现在 dotnet Core 做小型 CRUD 网站 ( 数据库 mysql ) 的技术栈是什么?
前端用 Razor 模板引擎吗,有像 Procedural PHP 一样直接简单组装 sql 作 crud 的路子吗,如果没有则 ORM 可以用哪个 |
59
chinvo 2019-07-27 10:27:04 +08:00
|
60
abmin521 2019-07-27 10:50:39 +08:00
var ModelPath = "d:/data/go/src/easyGin/models/"
var RouterPath = "d:/data/go/src/easyGin/router/" var ApiPath = "d:/data/go/src/easyGin/handle/" 这? |
61
charlie21 2019-07-27 10:54:17 +08:00
@chinvo 就是 纯 sql 结果读取+展示,让网站跑起来 model 层直接跳过,用 数据库 直接抓出来数据 展示
( 就是 极简陋 PHP 留言板的 toy demo 的感觉 ) 不用 model 当然这个流程是很不规范的 有没有什么教程可以参考 |
62
xiangdong1987 OP @abmin521 哈哈 时间紧任务重一个人好累 哈哈
|
64
chinvo 2019-07-27 12:29:22 +08:00
@charlie21 #61 另外可以不用 Razor,这样就不需要 ViewModel 层,asp net core 官方 simple / template 有
|
65
Actrace 2019-07-27 12:30:18 +08:00
楼主惨了,公然引战。
|
66
skymei 2019-07-27 12:55:43 +08:00
PHP 是世界上最好的语言
|
67
fancyhan 2019-07-27 14:53:52 +08:00 via iPhone
说到底是动态类型和静态类型的区别
|
68
xiangdong1987 OP @cheneydog #30 go mod proxy 了解一下 项目已经上 go mod
|
69
compareInt 2019-07-28 15:35:18 +08:00
php 是世界上最好的语言,别打我
|