这就是我为什么从 PHP 转向 Go 的原因

2020-04-01 22:22:32 +08:00
 wangbenjun5

记得以前有一次面试,面试官是一个和我年龄相仿的人,他就 PHP 里面 count 的用法连续问了我很多情况下的结果:

count(0);
count('00000');
count("0")
count(1)
count(null)
count("null")
count($undefinedVariable)
...

平时一般只会用 count 去计算数组或集合的元素个数,没想到还有这么多种情况,就一下子被问到了,只怪自己基础不扎实,没把 PHP 的手册背下来。。。

很多 PHP 的内置函数令人非常头疼,很多函数有很多功能、可以接受各种参数,返回的结果更无章可循,相比之下,go 的内置函数就非常简单明了,其参数类型固定,基本上一个函数只干一件事。

在写 PHP 的时候,每次调用别人写好的函数都非常不放心,因为你根本不知道这个函数返回的结果是什么东西,它可能是数组、可能是字符串、也可能是个数字。。。即使函数有注释也不一定可信,这其中有部分原因是因为开发人员水平较差,但是 go 的类型限定保证了一个函数只会返回一个固定类型的结果。

写 PHP 的时间越久你就会发现 PHP 的弱类型带来的好处远远大于坏处,项目写到最后几乎无法维护!而且里面会出现各种各样的奇怪 bug 。虽然说良好的编程习惯和规范可以避免部分情况,但是很多时候你没法通过这点保证。

使用 PHP,一个接口写完,很多时候心里压根没底,但是用 GO,写完只要编译没报错,基本上都没问题。

16069 次点击
所在节点    程序员
155 条回复
yafoo
2020-04-01 22:31:38 +08:00
各有优缺点吧,有些人喜欢自由,有些人喜欢被束缚。
salamanderMH
2020-04-01 22:35:51 +08:00
把 PHP 的手册背下来的也。。。面试挺随机的,我觉得这种问题。。
fox0001
2020-04-01 22:36:17 +08:00
PHP 内置函数名称最为要命,无章可循…
puzzle9
2020-04-01 22:39:49 +08:00
这种事情是吧
如果站在圈外 自然看的明白
如果站在圈内 也不觉得迷糊
iConnect
2020-04-01 22:45:33 +08:00
弱类型项目大了之后,确实缺乏一种安全感。
0DBBFF
2020-04-01 22:47:37 +08:00
"写 PHP 的时间越久你就会发现 PHP 的弱类型带来的好处远远大于坏处"
aloxaf
2020-04-01 22:50:35 +08:00
我也觉得弱类型毫无意义(注:弱类型!=动态类型),不只是维护的问题,还有安全性的问题
不过这个面试题……


P.S. php 7 其实也有 strict mode 了
PP.S. 我感觉 LZ 很适合学 Rust (笑
Felldeadbird
2020-04-01 22:50:43 +08:00
好处远远大于坏处,项目写到最后几乎无法维护

既然好处大于坏处,项目怎么最后无法维护呢?奇怪的 BUG ?前端传递 1. 结果 PHP 接收到的 其他值?

感觉楼主没突出转 GO 的重要性啊。
masker
2020-04-01 22:52:26 +08:00
你就是为了转而转,说的那么冠冕堂皇
dcsite
2020-04-01 22:54:00 +08:00
PHP 是无辜的,弱类型语言

可恨的是出这种面试题的人,建议你反问他:你知道茴香豆的茴字有几种写法吗?
crella
2020-04-01 22:56:46 +08:00
python 和 ruby 不都是动态强类型吗?

type('text') => class 'str'

'text'.class => String
Numbcoder
2020-04-01 22:57:12 +08:00
不写测试,神仙语言也救不了你
wangyzj
2020-04-01 22:59:26 +08:00
学到了
stabc
2020-04-01 23:00:31 +08:00
我写 PHP 好多年了,从来没遇到过那种问题。PHP 坑是很多,但是很多你几乎踩不到。新版本的 PHP 也支持 function 的类型定义了。
hantsy
2020-04-01 23:00:51 +08:00
这也能和语言的优劣扯上关系,你应该 PHP 和 Go 都从来没写过测试吧。
cmdOptionKana
2020-04-01 23:01:21 +08:00
静态语言一大堆,为什么选择 Go ?
outoftimeerror
2020-04-01 23:03:28 +08:00
写完只要编译没报错,基本上都没问题。
如果是这个特性的话,我觉得 rust 更符合你的期待。
back0893
2020-04-01 23:03:50 +08:00
我觉得你这面试题不是就是茴有几种写法...
hantsy
2020-04-01 23:04:02 +08:00
PHP 好像 5.6 开始在 OOP 方面就基本和 Java,C#可以站在一条起跑线上,弱类型自己要用,那只说是自己的问题。
hantsy
2020-04-01 23:05:31 +08:00
大千世界无奇不有,V 站真是一个娱乐网站。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/658465

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX