七叶笔记 » golang编程 » 为什么建议phper一定要学会Golang

为什么建议phper一定要学会Golang

导读

在写这篇文章前,先介绍下自己吧。我不是科班出生的,大学学的是一个名字很长的专业:机–械–设–计–制–造–及–其–自–动–化。当初为什么选这个专业呢?嗯,可能是因为家里包括七大姑、八大姨在内都没初中毕业的,对大学的专业大家都是一无所知,那时候天真的认为名字越长越牛b吧。反正就是稀里糊涂的选了个专业(这个专业,名字真的很长,填表格的时候,一行基本不够,或者必须挤一挤,┑( ̄Д  ̄)┍)。

毕业后,从事过本专业,后来各种原因转行,去某某上市培训机构,一开始想培训 java 的,后来思考再三(主要是当时java不好找工作),就投身到了php。

从事php后,在家国企背景公司工作过,但感觉太闲了,后跳出来,目前在一家创业公司(由此可见:小编的脑子那时候应该进水了 /(ㄒoㄒ)/~~)。

扯得有点远了,OK,步入正题:为什么我建议phper者一定要学golang呢?往下看 ↓ ↓ ↓ ↓ ↓ ↓

动态语言 的优缺点,以及PHP在现代web开发中的定位

1、动态语言的优势

php作为老牌动态语言之一,在过去的web开发中被大量使用,小编才疏学浅,就不单独讨论php的优势和缺点,这里只从公司业务的语言选择动态和静态语言做一个笼统的对比。

先说动态语言的缺点,比如:运行没静态语言快,以及接口对接时变量、字段对第三方或者说除了自己之外的其他开发者不够清晰,不够规范。举个例子:在一个流程中,你在你的方法或者函数里对一个大数组按引用地址传递进去后,增加了个字段,当这个数组往其他开发者的方法继续传递时,可能只有你自己知道有这个字段。

PHP动态语言的优势:

1)某些场景下,并不比静态语言慢多少,这里的场景是非IO密集型,计算密集型等等场合

2)动态语言非常适合敏捷开发,线上调试等等。相信很多的phper多有过下面的经典动作:

对,就是这么简单的一个拖拽,bug就改好了,日志就打了,天也一下就亮了—–加班改bug的经历有木有?/(ㄒoㄒ)/

所以,做个总结:PHP属于动态语言,动态语言适合短平快开发,适合敏捷开发,适合需要快速占领市场,适合功能随着用户的反馈不停迭代等场景的公司。

毕竟,在现在这样一个互联网环境,等你想好一个全功能的产品,然后再开发出来,可能一上线,黄花菜都凉了。

那么静态语言适合什么呢?适合功能已经迭代的定型了,产品具有非常强的沾粘性,同时保证高稳定性等等。总而言之,言而总之就是:这个项目你一年后上线都不影响用户的,比如银行系统,你做好了,做的够稳定了交付给别人用就行了,这种特别适合静态语言。

如果用一个部队来形容:那么动态语言开发就像是部队的排头兵、先锋队,先开疆扩土,逢山开路,逢水架桥,快速占领。而静态语言呢,则是部队里的坦克兵,当路修好了,桥架起来了,最后拼搏的还是谁的火力更猛(服务更稳定,更快速)。

由此可见,动态语言,不会在现代的web开发中消失殆尽,相反,如果这个市场竞争更激烈,更惨烈,动态语言开发的项目就会更多。

2、php在现代web开发的定位

在我看来,在一个系统中,PHP特别是适合做的是从一个服务里拿到数据,然后把数据给客户端的人发送过去,就ok了。因为这一层是直接面向客户端的,如果有bug,可以立即快速修复。而数据怎么来呢,则是后台底层服务加工好的。他们的关系如下:

PHP开发者为什么要学习golang呢

首先申明:小编我是无语言情节的。因为,我觉得程序员会几门编程语言是必须的。语言只是个工具。就像只会用砍刀剁骨头的厨师不是好演员一样。语言对于程序员来讲,就是刀具。剁骨头,就应该用钝刀;切黄瓜丝,就应该用快刀。你非要用钝刀去切黄瓜丝,那菜品真的……不容不忍直视

好了,到这里,为什么php的应该学习golang呢?学了golang能为我们phper带来什么改变呢?

  1. 思想改变

1)编程习惯的改变

对,你没看错,我觉得思想改变大于后面要提到的性能改变。当学习静态语言后,那种严谨的变量申明,你会觉得你开始变得想一个严谨的科学家了,一个你的地盘你做主,一切的一切尽在你的掌控中的感觉。比如在golang中:定义了一个结构(struct)

type Bottom struct {
 ID int64 ` json :"id"`
 Name string `json:"name"`
 Logo string `json:"logo"`
 Rank int64 `json:"rank"`
 Action int `json:"action"`
 Param string `json:"param"`
 State int `json:"state"`
}
 

那么,你在代码的任何一个流程,任何一个地方,要使用这个结构体时,都知道它有这些参数,无论是开发者A、开发者B

2)并发编程思想的改变:无需等待上一个函数的返回结果

如下场景:

function testA($a){
 $a++;
 return $a;
 }
function testB($b){
 $b++;
 return $b;
}
 $t=1;
 $a=testA($t);
 $b=testB($a);
 

从以上可以看出,我们时时刻刻都在等待上一步函数返回结果给下一个。但是,当采用golang的并发编程后,你会发现,可以实现一个不用等待上一步函数返回结果的方式。无非就是需要一个结果嘛,当函数 A和B都订阅了一个通道,A做完了,通知下B就可以了,其他时间,这之间的间隙,cpu想干嘛干嘛!(lll¬ω¬)

package main
 import  (
 "fmt"
 "time"
)
func TestA(t chan int) {
 num:= 1
 num ++
 fmt.Println("来自A:",num)
 t<- num
}
func TestB(t chan int) {
 num:= <-t
 num ++
 fmt.Println("来自B:",num)
 t<- num
}
func main() {
 t :=make(chan int)
 go TestA(t)
 go TestB(t)
 time.Sleep(time.Second*1)
}
 

以上输出为:

来自A: 2
来自B: 3
 

以上可以看出,为了得到3这个结果,在代码层里至少 没有必须等上一个函数返回 的情况。

2、性能影响

我把性能影响放最后,不是说golang带来的性能影响提升不大,相反,根据实测,性能提升了几十到甚至上百倍的的情况。所以,这里无需我多说。数据说话:

以前,我们的一个采集系统,采用php,环境、配置如下:

cpu:2.5GHz

系统: 阿里云 4核8G

网络:上限100M,不限量

群发任务:800条(注:这是换算到1个进程后的数据,其实我们当时做了多进程)

时间:30分钟

现在采用golang的并发群发后(注意,这里还是具体到类似一个进程的情况,其实在go里叫一个主协程。)

cpu:2.5GHz

系统:阿里云4核8G

网络:上限100M,不限量

群发任务:800条

时间:17秒

这是真实的案例,作为phper,你觉得还不应该学习它吗?

其实,在静态语言里,php转golang是成本最小的了。俗话说的好:好钢用在刀刃上,花钱花在裉节儿上,作为一个phper赶紧学起来吧。

希望本人能为你学习golang带去 一丝动力 ,也欢迎在下面留言哦!

相关文章