我為什麼從php轉go?

Iwanna發表於2020-09-27

今天有個同學問我,為什麼從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 協議》,轉載必須註明作者和本文連結

相關文章