本文目錄一覽:
怎麼學習golang
隨著 PHP 有著越來越深入的了解,以及遇到越來越多的不同業務時,使用 PHP 總會讓我有一種莫名的無力感。當然,並不是我一個人在使用 PHP 的時候遇到了問題。事實上,每個略微有一些經驗,接觸過一些需求的人都會有同樣的困惑。各種配合 LAMP(或者LNMP?)架構的後端技術也因此被發明或被發現,進而整合到 PHP 的開發的技術體系中。從簡單的 Memcached作為數據中轉,cron 後端定時處理;到 Gearman、RabbitMQ 這些隊列神器;最近 Laruence 甚至封裝了利用 libcurl 的非同步特性實現並發 RPC 調用的 yar 擴展。幾乎整個社區都在尋找 PHP 的摩西之路。好吧,說了一大堆,回歸主題。之前我寫了一篇英文練筆《Why you PHP guys should learn Golang》,獲得不少國際友人的關注。排除拼寫和語法被他們詬病外,主要是有許多朋友覺得我沒把事情說清楚。所以這裡我用母語重新聊聊這個事情,只是這些國際友人什麼時候能學會閱讀中文呢?;)Go 或者 Golang,是由 Google 支持的快速、一致、穩定的,有活躍的社區支持的開源編程語言。越來越多的應用選擇使用 Golang 進行構建。雖然 Rob Pike 說「… 我們希望 C++ 程序員來了解 Go 並作為一個可選的語言 …」,不過我真得認為:PHPer 應當學習 Golang! 接下來我們就來談談原因。容易學習PHP 相當容易學習。Golang 也是!在這點上,一群大老外對我的觀點進行了猛烈的抨擊。他們認為我羞辱了 PHPer,說得好像只有簡單的東西 PHPer 才能學會一樣。但是,這難道不是事實嗎?或者換個說法:像我一樣的喜歡 PHP 的人,或多或少都會更喜歡簡單的東西。PHP 的語法接近 C 族編程語言(C/C++/Java等等)。如果有這些語言的經驗,在第一次遇到 PHP 的時候立刻就能開始上手編寫代碼。在我看來,編寫 PHP 代碼或許更加考驗程序員的記憶力,而不是智力(當你面對各種不同風格的函數定義、各種擴展的特殊約定時,你一定會相當認同我的觀點)。Golang 同樣是一個 C 族編程語言。呃,或者有一些不同吧。例如關鍵字 「for」,功能上和 PHP 的接近,但是沒有括弧。條件語句 「if」 同樣無需括弧。可以閱讀 Effective Go 了解更多內容。Golang 只有 3025 個關鍵字和 47 個操作符號、分隔符號或其他特殊標記。記住這些標記確實不需要什麼特別的努力。精巧的類型系統相當容易使用。實用的,具有方法的結構體類型代替了笨重的對象系統。介面的設計是 Golang 中我最喜歡的部分。當完成了《Go 指南》的學習之後,利用 PHP 積累的經驗,立刻就可以開始使用 Golang 處理一些簡單的任務。容易使用PHP 腳本是由 SAPI 組件進行解析執行的,如 Web 伺服器模塊、PHP-FPM 或者 CLI。部署 PHP 所需要的全部東西就是一個 SAPI 環境。配置這個環境對於新手來說可能是學習 PHP 過程中最為困難的部分。所有的 Golang 代碼會編譯和鏈接為本地碼。所以除了編譯環境,執行時無需再為其進行任何特別的部署。對比 PHP 環境的配置,這要簡單很多。你真得認為配置 PHP 環境很複雜嗎?我不覺得,真的!而配置 Golang 編譯環境比那還要簡單點。我確信已經有大量的 Golang 相關的書籍、文章介紹過如何進行編譯環境的配置了。為了更加清晰,我這裡梳理一下思路。
有三個步驟需要處理:下載Golang 的源代碼;根據《[翻譯]Go 環境設置》的提示設置環境變數;運行源代碼 src 目錄中的 all.bash。或者一步到位:使用二進位包進行安裝。然後就會得到一個叫做「go」的工具集合。使用「go」工具和使用 PHP 的 CLI 工具一樣簡單。《[翻譯]go 工具》對此進行了詳細的解釋。PHP 的迷思如果一個編程語言容易學習和使用,我們是不是就應當學習它呢?有許多容易學習和使用的編程語言。難道要把它們都學一遍?答案是顯然的:NO!但是 呢?只是因為它很酷!是的,我在開玩笑,但是這是真的。無論如何先從 PHP 自身談起吧。PHP 「原本是為了開發動態的 Web 頁面而設計的伺服器端通用語言(Wikipedia)」。PHP 一個重要的特性就是可以嵌入到 HMTL 中。代碼編寫在「?php … ?」標籤內;HTML 寫在標籤外。它有一個強大的擴展系統。擴展使用 C 調用 Zend API 編寫。數據的處理實際上要利用這些擴展完成。在我看來,PHP 是世界上最好的模板語言。但是當積累了一些 PHP 的經驗,並且開始面對一些更加複雜的 Web 應用時,你一定會對 PHP 產生一種無力的感覺。它沒有內建的並行機制,沒有線程、進程(你真得認為那個簡陋的進程式控制制可以不加改造的用在高並發的生產環境?),或者其他某「程」。一個慢數據源可以阻塞整個頁面的處理。消息隊列、緩存、代理……系統開始不僅僅是 PHP 這麼單純,還包括了許多服務和系統組件。這時,PHP 只處理很少的業務邏輯,成為真正的模板語言了。PHPer 們總是在尋找解決這一問題的辦法,如「PHP multithread」或者PHP RPC 並發框架。我很難說哪種會更好一些。不過我肯定你會需要選擇一些編程語言用於後端工作的開發。就我自己的經驗,我嘗試過 C(一直在和 malloc/free 進行搏鬥)/Java(陷入到了 jar 地獄中)/Python(從來沒能做到 Pythonic 不說,還總是在錯誤的類型中打轉)……如果想要獲得性能,就得同內存管理進行搏鬥;如果用 GC,就得部署和調優 VM;當獲得便利性的時候,同時也是走在刀尖上,一個小錯誤就引起巨大的災難……每個都有優勢,同樣每個都有問題。好吧!現在回到 Golang!Golang 有 GC,無需關心內存管理(或者可以用較少的精力去關注它)。代碼被編譯為本地碼,因此「cp」和「mv」就是部署 Golang 編寫的應用所需要的全部工具。噢,我剛才已經說過了,Golang 是一個具有靜態類型系統的編譯語言。所以你沒有機會弄亂變數的類型。當然,PHPer 應該學習 Golang 的一個重要原因是「轉到Go 是因為他們並未放棄太多的表達能力,但是獲得了性能,並且與並發共舞(Rob Pike)」。《Why Not Go?(英文)》對此進行了深入的分析。我可以分享一些我的經驗:有一個 Gearman 的worker 用於處理後端數據。PHP 通過其 API 連接到 Gearman 的 Job Server 向 worker 發起請求。最初 worker 是使用 python 編寫的(還有更加原始的版本,PHP 的,但是你能想像它工作起來……唉,不說了……)。這個版本有許多的問題(是我們自己的問題,不關 Python 的事),但是至少它能工作。後來用 Golang 重寫了這個 worker。為此我開發了 Golang 的 Gearman API,並使用 Zend API 編寫了一個在 Golang 中執行 PHP 腳本的包。然後將它們放在一起:一個可以執行 PHP 的 Gearman worker。它已經工作了一段時間了,看起來還不錯!哦,受到 Yar 的啟發,這裡還有一個 Golang 編寫的 RPC 合併器,用來合併 PHP 腳本中的 RPC 調用。現在還是個玩具,不過或許日後能用得著。這其實是將 Golang 的 channel 當作消息隊列來用。我在《Golang:有趣的 channel 應用》中對此有一些說明。世界真美好啊。謝謝 Golang!無論如何,大多數 PHPer 在進行後端開發的時候都會需要學習一些其他語言。如果你正在尋找,或者已經嘗試了一些其他語言。為什麼不來試試 Golang?它真得可以讓你的生活更加輕鬆和快樂。讓你可以有更多的時間陪伴你的家人和朋友,吃你愛吃的東西,去你想去的地方。貌似我還是沒說清楚啊?好吧,沒關係,在下個月的中國軟體開發者大會上再跟大家就這個話題做一個探討吧。
銀豹收銀系統用編程什麼語言寫的
三大平台的內核都是主要用C語言寫的。
不同的語言有不同的跨平台方法。
1、C/C++是通過編譯器跨平台,一套代碼通過不同平台的編譯器編譯成可在當前平台運行的二進位程序,然後分發二進位程序到相應平台部署使用,在Windows上使用VC編譯的C/C++程序是不能在Linux或者Mac OS上運行的。編寫大型的跨平台的C/C++程序,一般都不可避免地會調用到系統相關的介面,比如多線程的實現,各個平台就一樣,這個時候就需要程序員針對不同平台進行封裝,並且使用條件編譯來實現編譯差異部分,所以,使用C/C++寫跨平台的程序是比較考驗程序員的功力的。C/C++語言是「源碼級」跨平台,需要「一次編寫,到處編譯」。
2、Java是通過虛擬機實現的跨平台,平台相關的東西都被虛擬機封裝起來的,程序員一般不需要關心。Java程序實現了「一次編譯,到處運行」,你在Windows上編譯的Java程序可以直接拿到Linux或者Mac OS下運行,當然前提是目標平台上得裝了JVM虛擬機。
3、Python這類腳本語言,是通過解釋器跨平台的,同樣解釋器封裝了平台相關的東西,腳本類語言不需要編譯,解釋器直接讀源代碼解釋運行,實現了「一次編寫,到處運行」。
C/C++、Java、Python是編譯型語言、解釋型語言、腳本語言的代表(當然現在這種分類說法已經不太正確了)。其他語言基本都是這三種模式,比如:golang、Rust與C/C++類似;C#與Java類似;Ruby、Perl與Python類似。
golang適合做web開發嗎
適合。框架足夠成熟了 A Survey of 5 Go Web Frameworks
小型項目你甚至不用框架,用net/http http – The Go Programming Language
常用庫也成熟了 Top – Go Search
golang的web後端即使不concurrent也比php,ruby,python快很多很多
golang里用concurrent真的非常方便,非常非常快,超大web項目golang scale成本低
如果你想,golang的部署可以比php更方便,使用go get和http.ServeAndListen()可以不用nginx和apache
對於文件改動重新編譯其實並不是大問題,看pilu/fresh · GitHub,其實你自己寫shell腳本(也可以直接用go寫,因為它本身就是系統語言)監控文件系統改動然後自動重新build,即使是C/C++的項目這也不是大問題,人們不用C/C++寫web是因為它們不是寫web app的最佳選擇
golang寫的代碼編譯通過後,要比scripting language魯棒,因為go compiler強制一些最佳實踐
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/287023.html