GO

2007年,受夠了C++煎熬的Google首席軟件工程師Rob Pike糾集Robert Griesemer和Ken Thompson兩位牛人,決定創造一種新語言來取代C++, 這就是Golang。出現在21世紀的GO語言,雖然不能如願對C++取而代之,但是其近C的執行性能和近解析型語言的開發效率以及近乎於完美的編譯速度,已經風靡全球。特別是在雲項目中,大部分都使用了Golang來開發,不得不說,Golang早已深入人心。而對於一個沒有歷史負擔的新項目,Golang或許就是個不二的選擇。

被稱爲GO語言之父的Rob Pike說,你是否同意GO語言,取決於你是認可少就是多,還是少就是少(Less is more or less is less)。Rob Pike以一種非常樸素的方式,概括了GO語言的整個設計哲學--將簡單、實用體現得淋漓盡致。

很多人將GO語言稱爲21世紀的C語言,因爲GO不僅擁有C的簡潔和性能,而且還很好的提供了21世紀互聯網環境下服務端開發的各種實用特性,讓開發者在語言級別就可以方便的得到自己想要的東西。

發展歷史

2007年9月,Rob Pike在Google分佈式編譯平臺上進行C++編譯,在漫長的等待過程中,他和Robert Griesemer探討了程序設計語言的一些關鍵性問題,他們認爲,簡化編程語言相比於在臃腫的語言上不斷增加新特性,會是更大的進步。隨後他們在編譯結束之前說服了身邊的Ken Thompson,覺得有必要爲此做一些事情。幾天後,他們發起了一個叫Golang的項目,將它作爲自由時間的實驗項目。

2008年5月 Google發現了GO語言的巨大潛力,得到了Google的全力支持,這些人開始全職投入GO語言的設計和開發。

2009年11月 GO語言第一個版本發佈。2012年3月 第一個正式版本Go1.0發佈。

2015年8月 go1.5發佈,這個版本被認爲是歷史性的。完全移除C語言部分,使用GO編譯GO,少量代碼使用匯編實現。另外,他們請來了內存管理方面的權威專家Rick Hudson,對GC進行了重新設計,支持併發GC,解決了一直以來廣爲詬病的GC時延(STW)問題。並且在此後的版本中,又對GC做了更進一步的優化。到go1.8時,相同業務場景下的GC時延已經可以從go1.1的數秒,控制在1ms以內。GC問題的解決,可以說GO語言在服務端開發方面,幾乎抹平了所有的弱點。

在GO語言的版本迭代過程中,語言特性基本上沒有太大的變化,基本上維持在GO1.1的基準上,並且官方承諾,新版本對老版本下開發的代碼完全兼容。事實上,GO開發團隊在新增語言特性上顯得非常謹慎,而在穩定性、編譯速度、執行效率以及GC性能等方面進行了持續不斷的優化。

GO語言關鍵特性

GO語言之所以厲害,是因爲它在服務端的開發中,總能抓住程序員的痛點,以最直接、簡單、高效、穩定的方式來解決問題。這裏我們並不會深入討論GO語言的具體語法,只會將語言中關鍵的、對簡化編程具有重要意義的方面介紹給大家,跟隨大師們的腳步,體驗GO的設計哲學。

GO語言的關鍵特性主要包括以下幾方面:

  • 併發與協程
  • 基於消息傳遞的通信方式
  • 豐富實用的內置數據類型
  • 函數多返回值
  • defer機制
  • 反射(reflect)
  • 高性能HTTP Server
  • 工程管理
  • 編程規範

開發過程中需要注意的點

以下是在實際開發過程中遇到的一些問題,僅供參考:

異常處理統一使用error,不要使用panic/recover來模擬throw…catch,最初我是這麼做的,後來發現這完全是自以爲是的做法。

原生的error過於簡單,而在實際的API開發過程中,不同的異常情況需要附帶不同的返回碼,基於此,有必要對error再進行一層封裝。

任何協程邏輯執行體,邏輯最開始處必須要有defer recover()異常恢復處理,否則goroutine內出現的panic,將導致整個進程宕掉,需要避免部分邏輯BUG造成全局影響。

在Golang中,變量(chan類型除外)的操作是非線程安全的,也包括像int這樣的基本類型,因此併發操作全局變量時一定要考慮加鎖,特別是對map的併發操作。

所有對map鍵值的獲取,都應該判斷存在性,最好是對同類操作進行統一封裝,避免出現不必要的運行時異常。

定義slice數據類型時,儘量預設長度,避免內部出現不必要的數據重組。

第一步 Go 語言之旅

這個是一個官方的入門教程,或者說只是一個大概瞭解的教程,只介紹了一些簡單的東西,並且沒有太多的說明。不過這個教程支持在線執行代碼,還是很不錯的,這個時候你都不需要有本地的開發環境。不用想太多,現在就開始,把這個教程從頭到尾看一遍,練習一遍,遇到不明白的地方也不要糾結,繼續向後看就行了。

官方: https://tour.golang.org

中文網: http://tour.studygolang.com

第二步 開發環境

這裏也可以忽略不看,因爲每一個教程都會介紹怎麼配置環境

操作系統

個人推薦使用 Linux,可以使用 Ubuntu 或者 Fedora ,如果條件允許(不差錢) 也可以使用 Mac,當然使用 Windows 也是可以的,慢慢的就會知道 Windows 下做開發的糾結了。

開發環境

Go 的安裝非常的簡單,沒有太多的依賴,如果是 Linux 下安裝基本上下載一個二進制包,解壓配置上一個環境變量、GOROOT 既可以了,具體的可以查看官方的安裝方法: 官網安裝文檔 、 中文安裝文檔

開發工具

可以選擇一個自己喜歡的,個人建議要用個 IDE,我使用過 vim 、Sublime、Intellji idea ,最後發現還是 IDE 比較方便,尤其是代碼追蹤斷點等。這個不糾結那種好,有人和我說 Sublime 和 vim 安裝上插件也都可以,但是個人不推薦(我以前是 Sublime 重度用戶,PHP 一直都在 Sublime 下開發)。

主流的文本編輯器及 IDE 的配置 官方 都有介紹,選一個自己喜歡的就可以了。

第三步 看一套視頻

有人可能喜歡看視頻,有人可能喜歡看文檔,這個根據個人愛好去選擇,個人建議要看一套視頻並且只看一套就夠了,畢竟看視頻的效率還是比較低的,看完視頻一些基礎的知識點就可以掌握,並且會知道一些專有名字的讀法。我以前學 PHP 的時候就從來沒看過視頻,導致很多名詞的發音都是錯的,經常被人嘲笑……,當然如果英文非常的好的同學就不用糾結了。

網上 Golang 的視頻不是很多,不過也有好多套,推薦 無聞的Go編程基礎,這個是被 golangcaff.com 的 Summer

整理優化過的,看起來的效果會比一些其他網站好一些。

第四步 看一篇教程

教程也有很多,看個人的喜好吧,推薦看 Go 入門指南 ,這個也是由 無聞 翻譯 的 The Way to Go ,不過社區的版本對排版進行了優化並加入了後面沒有翻譯完的部分。

第五步 將標準庫全部都過一遍

至少要叫常用的全都看一遍,如 strings / strconv / http 等,如果有能力可以將它們都記住,如果記憶力不太好(像我這樣)至少也要知道有什麼,用到的時候通過手冊可以快速找到。

官方標準庫: https://golang.org/pkg/

中文版的標準庫: https://studygolang.com/static/pkgdoc/main.html

極力推薦 https://github.com/astaxie/gopkg ,可以在學習的時候看這個,有關於標準庫的詳細說明和示例,學習起來會容易一些,等全都明白了要使用的時候可以去查看上面的文檔。

更新:

又發現了一個不錯的學習標準庫的資料: 《Go語言標準庫》The Golang Standard Library by Example ,有點小遺憾就是不是很全,個別的包沒有完成,不過 astaxie 的那個也不全,可以互相參考着看。

完成

到這個時候,你肯定已經入門了,剩下就開始寫自己的東西吧,比如寫一個博客,或者去學習一個框架,不知道怎麼繼續去深造的話就去招聘網站上看看自己喜歡的企業都要求什麼,招聘要求會什麼就去學什麼。

暫時就到這裏,後續還會繼續更新此文檔,推薦一些有用的資源,歡迎收藏關注。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章