我为什么从php转go?

今天有个同学问我,为什么从 php 转 go?
此前没认真的去思考过,在此记录下我理解的 go 相比较于 php 的一些优势
此文并无贬低 php 之意,php 也曾意气风发过

运行环境简单#

golang 官方提供了明确的环境安装方式
php 市面上选择较多,无统一的方式

  1. php 环境搭建
    用过 php 的至少都能搭建个 wamp 或者 lamp 环境,但是没有一个官方的环境谁又没有在安装环境时遇到过各种坑呢~
    当然市面上有很多集成环境比如 phpstudywampserver

  2. golang 环境搭建
    官网(或国内镜像)下载安装器,一直点下一步即可

语法简洁且统一#

php 关键词较多,数量为 go 的 3 倍
go 强语法限制且自带有 gofmt 格式化代码
php 无强制限制,导致每个人写出的格式都不太一样
go 变量和函数访问限制的方式相对简单

  1. php 关键词 (共 75 个)

    __halt_compiler (), abstract, and, array (), as, break, callable (as of PHP 5.4), case, catch, class, clone, const, continue, declare, default, die (), do, echo, else, elseif, empty (), enddeclare, endfor, endforeach, endif, endswitch, endwhile, eval (), exit (), extends, final, finally (从 PHP 5.5 开始), for, foreach, function, global, goto (从 PHP 5.3 开始), if, implements, include, include_once, instanceof, insteadof (从 PHP 5.4 开始), interface, isset (), list (), namespace (从 PHP 5.3 开始), new, or, print, private, protected, public, require, require_once, return, static, switch, throw, trait (从 PHP 5.4 开始), try, unset (), use, var, while, xor, yield (从 PHP 5.5 开始)
    __CLASS__, __DIR__ (从 PHP 5.3 开始), __FILE__, __FUNCTION__, __LINE__, __METHOD__, __NAMESPACE__ (从 PHP 5.3 开始), __TRAIT__ (从 PHP 5.4 开始)

  2. go 关键词(共 25 个)

    break, default, func, interface, select, case, defer, go, map, struct, chan, else, goto, package, switch, const, fallthrough, if, range, type, continue, for, import, return, var

  3. php 无强语法限制

    // 大括号可接在方法后面也可以另起一行
    function test1() {
    }
    function test2()
    {
    }
  4. go 强语法限制且自带有 gofmt 格式化代码

    // 方法后的大括号只能和方法名同行
    func main() {
    }
  5. php 属性和方法访问的限制

    // 用关键词声明
    public $name="自身、子类、实例中均可使用"
    protected $name = "自身及子类能使用"
    private $name="只有自身能使用"
  6. go 变量和函数访问的限制

    // 用首字母的大小写区分
    var name = "包内才能访问"
    var Name = "包外也可以访问"

包管理#

  1. php 包管理
    使用 composer 进行第三方包管理,如果要使用,需要去先去专门的第三方网站发布自己的包

    1. 使用 composer init 初始化项目
    2. 使用 composer install 包名引入第三方包
    3. 使用 composer dump-autoload 自动加载引入的第三方包
    4. 在需要用到的地方 use,然后 new 一个实例,就可以调用其方法了
  2. go 包管理
    官方提供了 go mod 进行包管理,包可以发布在任意网站上

    1. 使用 go mod init 当前包名初始化项目
    2. 使用 go get 包网址引入包
    3. 在需要使用的地方 import 即可使用

运行效率#

这里使用快速排序法来对 1000000 个随机数进行排序及验证
然后统计运行时间和使用的空间
不使用官方自带的排序算法,代码有点长,代码放在 github 上

  1. php 代码
  2. go 代码
  3. 运行结果
    go 使用的内存为 php 的 1/5
    go 使用的时间为 php 的 1/10
    我为什么从php转go?

前一篇文章中有我学习 go 的一些历程,刚开始学习的小伙伴可以参考下

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 4

是不是还有一点,PHP 的前景看似不再明朗,相信 GO 以后会越来越好?直接说完事了 :joy:

4年前 评论
Iwanna (楼主) 4年前

没说到重点。

重点就是:php 没落了,没有 go 火,找工作 php 少了,go 多了(朋友圈的人事 / 猎头都 改招 go 了 :see_no_evil:

4年前 评论

@839891627 所以为什么他们都改招 go 了呢?
因为公司需要招 go
为什么公司招 go 的慢慢多了而招 php 的渐渐少了呢?
我上面说的那些应该是其中的一些原因~~

4年前 评论

一起开发呗~我觉得项目不涉及并发,微服务什么的。就可以用 php 开发。节省开发成本。我现在就是一个项目可能也用到 go,也用到 php。但是实话楼上的也说了,就是 招聘行情 php 没落了,golang 明显需求多了,薪资也是 php 整体没有增长了。

4年前 评论