我為什么選擇Go語(yǔ)言(Golang)

Golang

作為一個(gè)以開(kāi)發(fā)為生的程序員,在我心目中編程語(yǔ)言如同戰(zhàn)士手里的武器,好與不好主要看使用的人是否趁手、是否適合,沒(méi)有絕對(duì)的高低之分。

從2013年起,學(xué)習(xí)并使用Golang已經(jīng)有4年時(shí)間了,我想敘述一下我選擇Go語(yǔ)言的一些經(jīng)歷,希望能給考慮使用Go的開(kāi)發(fā)者們做些參考。

Golang和其他語(yǔ)言一樣并非完美,它有很多優(yōu)點(diǎn),也當(dāng)然有很多缺點(diǎn)

為了避免無(wú)謂的語(yǔ)言爭(zhēng)論,提前說(shuō)明一點(diǎn):Golang并不完美。

我在許多討論場(chǎng)合中都表達(dá)過(guò)這樣的觀點(diǎn),選擇適當(dāng)?shù)木幊陶Z(yǔ)言非常重要,甚至?xí)绊懸粋€(gè)程序員的職業(yè)發(fā)展歷程,但是編程語(yǔ)言本身確沒(méi)有絕對(duì)的高低之分。一名武術(shù)大師使用狙擊槍不僅不能發(fā)揮槍的優(yōu)勢(shì),而且可能會(huì)影響自己的招式,最重要的是,武術(shù)大師可能根本沒(méi)有使用狙擊槍的場(chǎng)景,一把精良的劍可能更適合他。

一些經(jīng)歷

我并非計(jì)算機(jī)專業(yè)科班出身,我學(xué)習(xí)的是土木工程專業(yè),在學(xué)校曾經(jīng)簡(jiǎn)單的學(xué)習(xí)過(guò)C語(yǔ)言,但是學(xué)校的計(jì)算機(jī)教育并沒(méi)有引起我學(xué)習(xí)編程的興趣(國(guó)內(nèi)學(xué)校的教育方式不扼殺學(xué)生的興趣就算是萬(wàn)幸了)。學(xué)習(xí)編程的原因是我當(dāng)時(shí)很想搞清楚怎么搭建一個(gè)漂亮平面設(shè)計(jì)網(wǎng)站和論壇,有一個(gè)朋友推薦我學(xué)習(xí)了ASP(用VB語(yǔ)言),在我大學(xué)那個(gè)時(shí)候,搭建一個(gè)網(wǎng)站對(duì)于大多數(shù)人來(lái)說(shuō)還是一個(gè)挺神秘的事情。后來(lái)又因?yàn)閼卸瑁幌牒推渌瑢W(xué)一樣手繪圖紙,于是專心學(xué)習(xí)了一段時(shí)間Lisp,以便于在AutoCAD(一款工程繪圖軟件)自動(dòng)繪制圖紙。對(duì)于編程,我一向是實(shí)用主義

大學(xué)畢業(yè)后,放棄了土木專業(yè)的就業(yè)方向,正式以編程作為自己的職業(yè),學(xué)習(xí)不同的編程語(yǔ)言也成為了工作必備的要求。

選擇CSharp

一開(kāi)始,我選擇了C#以便于開(kāi)發(fā).net框架下的應(yīng)用和網(wǎng)站,這次選擇非常有意義,在.net框架下不僅可以開(kāi)發(fā)動(dòng)態(tài)網(wǎng)站,還可以開(kāi)發(fā)各種Windows系統(tǒng)下的視窗程序、控制臺(tái)和動(dòng)態(tài)鏈接庫(kù),微軟提供了非常好用的IDE,對(duì)于一個(gè)非科班出身的程序員,在.net框架完整的解決方案的幫助下,我盡可能快的接觸到了軟件開(kāi)發(fā)領(lǐng)域的各個(gè)方面。

選擇PHP

隨著Web2.0概念的提出,我的工作幾乎完全是Web開(kāi)發(fā)。在這個(gè)領(lǐng)域最被人們津津樂(lè)道的語(yǔ)言就是PHP。本來(lái)我并不以為然,直到我發(fā)現(xiàn)很多優(yōu)秀的項(xiàng)目都是用PHP開(kāi)發(fā)后,它成功的吸引了我的注意;另一個(gè)原因是微軟的服務(wù)器操作系統(tǒng)和IIS在當(dāng)時(shí)的版本下確實(shí)有許多問(wèn)題,我希望能擺脫微軟的控制,將軟件部署在Linux或Unix服務(wù)器上,LAMP(Linux+Apache+MySQL+PHP)組合方案就是我所需要的。PHP除了擁有學(xué)習(xí)快,上手容易這些基本的優(yōu)勢(shì)外,PHP開(kāi)源社區(qū)非?;钴S,你可以輕松的找到各種開(kāi)源的PHP項(xiàng)目,幾乎所有Web相關(guān)的開(kāi)源項(xiàng)目中最著名的都是PHP語(yǔ)言開(kāi)發(fā)的,比如 WordPress、Drupal、PrestaShop、Joomla、Opencart等,數(shù)不勝數(shù)。

選擇Java

后來(lái),我開(kāi)始帶領(lǐng)團(tuán)隊(duì),成為了公司開(kāi)發(fā)團(tuán)隊(duì)的小頭目,我不能只專心于自己的開(kāi)發(fā)工作,需要考慮整個(gè)團(tuán)隊(duì)的工作需要。PHP開(kāi)發(fā)公司經(jīng)營(yíng)的網(wǎng)站非常有效,但是團(tuán)隊(duì)里有一些項(xiàng)目的需求方會(huì)要求使用他們指定的開(kāi)發(fā)語(yǔ)言,比如Java。在當(dāng)時(shí),Java被認(rèn)為是最穩(wěn)定、最安全、最標(biāo)準(zhǔn)的解決方案,許多開(kāi)發(fā)領(lǐng)域的大神們也非常推崇Java,J2EE幾乎是政府、金融等領(lǐng)域大型項(xiàng)目的標(biāo)準(zhǔn)解決方案。出于市場(chǎng)需要,我不得不讓自己和團(tuán)隊(duì)學(xué)習(xí)和掌握J(rèn)ava以便于能夠有更多的項(xiàng)目機(jī)會(huì)。

選擇Python

Java本身很優(yōu)秀,再加上活躍的社區(qū)、完善的第三方框架和庫(kù),但是總讓我覺(jué)得太麻煩(或者是我越來(lái)越懶),團(tuán)隊(duì)常常會(huì)有一些簡(jiǎn)單的工作任務(wù),于是我選擇了Python來(lái)做這些簡(jiǎn)單的工作。Python的簡(jiǎn)單出乎預(yù)料,剛開(kāi)始學(xué)習(xí)的一段時(shí)間,我非常迷戀Python,它讓編程變得如此簡(jiǎn)單,并且它歷史悠久,擁有非常豐富的開(kāi)源資源,Web、桌面、服務(wù)器領(lǐng)域的開(kāi)發(fā)都有它的身影。

Python是我非常喜歡的語(yǔ)言,但是它的性能問(wèn)題是我的心結(jié),盡管如《黑客與畫(huà)家》作者所說(shuō),程序的運(yùn)行性能往往不是編程語(yǔ)言導(dǎo)致,而且未來(lái)計(jì)算機(jī)硬件的發(fā)展速度會(huì)讓編程語(yǔ)言的性能差異越來(lái)越微不足道,但如果能有一門(mén)語(yǔ)言能夠像Python那么簡(jiǎn)單又同時(shí)具備靜態(tài)語(yǔ)言的性能豈不更好。

很幸運(yùn),我在那段時(shí)間,遇到了Golang。

選擇Go

我非??粗匾婚T(mén)語(yǔ)言的入門(mén)門(mén)檻。我所在的團(tuán)隊(duì)并不大,我們需要精打細(xì)算每一個(gè)時(shí)間成本的投入,學(xué)習(xí)和進(jìn)步是必須的,但是也需要切實(shí)的考量成本問(wèn)題。

Golang入門(mén)非常快,當(dāng)時(shí)我獨(dú)自學(xué)習(xí)大概花了一周時(shí)間(我還要保持其他工作正常完成),然后我收集整理學(xué)習(xí)資料,再組織團(tuán)隊(duì)的其他成員學(xué)習(xí),整個(gè)開(kāi)發(fā)團(tuán)隊(duì)學(xué)習(xí)Golang非常的快,無(wú)論他們以前擅長(zhǎng)Java、C++或是其他語(yǔ)言,都能很快的上手。

我有一個(gè)好朋友,曾經(jīng)共事過(guò)一段時(shí)間,后來(lái)這位朋友專心于前端開(kāi)發(fā)領(lǐng)域。有一次我們討論團(tuán)隊(duì)配合的問(wèn)題,討論到前后端API開(kāi)發(fā)的一些事情,當(dāng)時(shí)我提到了Golang,我朋友看了一些簡(jiǎn)單的介紹和范例后問(wèn)了我一個(gè)問(wèn)題 “作為腳本語(yǔ)言,Golang與Python、NodeJS比起來(lái)有什么優(yōu)勢(shì)?”。聽(tīng)到這個(gè)問(wèn)題,我非常高興,原因是我的朋友把Golang當(dāng)作了腳本語(yǔ)言(我的這位朋友也有多年的開(kāi)發(fā)經(jīng)驗(yàn),而且在前端領(lǐng)域也是相當(dāng)厲害的大神了),這至少說(shuō)明作為靜態(tài)語(yǔ)言的Golang給人的初步影響是簡(jiǎn)單清晰的,如同腳本語(yǔ)言(動(dòng)態(tài)語(yǔ)言)一樣。

Golang的性能很好,根據(jù)官方的描述以及其他人的測(cè)試結(jié)果來(lái)看,它的運(yùn)行性能僅次于C/C++。當(dāng)然,會(huì)有很多人認(rèn)為這并不絕對(duì)有用,性能問(wèn)題還是得根據(jù)具體的代碼環(huán)境而言,純粹的循環(huán)IO沒(méi)有意義。不過(guò)一個(gè)語(yǔ)法上像腳本語(yǔ)言一樣簡(jiǎn)單的高性能靜態(tài)語(yǔ)言,對(duì)程序猿來(lái)說(shuō)還是很有吸引力的。

最后

  • 隨著團(tuán)隊(duì)和我的成長(zhǎng),我們的項(xiàng)目需要能夠運(yùn)行在不同操作系統(tǒng)的服務(wù)器上,甚至有一些需要運(yùn)行在客戶機(jī)上,而不需要讓用戶安裝額外的虛擬機(jī)或解釋器;
  • 現(xiàn)在的需求提供方也更加理性、專業(yè),不再把指定開(kāi)發(fā)語(yǔ)言放在需求清單中;
  • 我們的團(tuán)隊(duì)依然不大(就算大,也沒(méi)有必要浪費(fèi)),所以我們需要一種編程語(yǔ)言可以同時(shí)勝任大型項(xiàng)目開(kāi)發(fā)、日常維護(hù)工具開(kāi)發(fā)、Web服務(wù)端API開(kāi)發(fā);
  • 我們需要一種可靠的編程語(yǔ)言,開(kāi)源、社區(qū)發(fā)展迅速、有像Google這樣的科技巨頭的支持

所以,我選擇Golang

歡迎大家簡(jiǎn)書(shū)或我的個(gè)人博客與我交流

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,226評(píng)論 25 708
  • 一、異同對(duì)比選擇1、Python和ruby的相同點(diǎn): * 都強(qiáng)調(diào)語(yǔ)法簡(jiǎn)單,都具有更一般的表達(dá)方式。python是縮...
    沃倫蓋茨閱讀 4,304評(píng)論 2 24
  • 首先,GTD 的核心觀念: 清空大腦中的待辦事項(xiàng); 任何一個(gè) idea 必須有明確的安排和完成標(biāo)志,而不能是簡(jiǎn)單的...
    百毒閱讀 1,577評(píng)論 0 5
  • 雙節(jié)心不爽 好友呼遠(yuǎn)行 去看大山河 快樂(lè)心中吟
    海語(yǔ)天籟閱讀 377評(píng)論 3 2

友情鏈接更多精彩內(nèi)容