GO

 

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

被稱爲GO語言之父的Rob Pike說,你是否贊成GO語言,取決於你是承認少就是多,仍是少就是少(Less is more or less is less)。Rob Pike以一種很是樸素的方式,歸納了GO語言的整個設計哲學--將簡單、實用體現得淋漓盡致。git

不少人將GO語言稱爲21世紀的C語言,由於GO不只擁有C的簡潔和性能,並且還很好的提供了21世紀互聯網環境下服務端開發的各類實用特性,讓開發者在語言級別就能夠方便的獲得本身想要的東西。程序員

 

發展歷史

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

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

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語言在服務端開發方面,幾乎抹平了全部的弱點。vim

在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.comSummer整理優化過的,看起來的效果會比一些其餘網站好一些。

第四步 看一篇教程

教程也有不少,看我的的喜愛吧,推薦看 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 的那個也不全,能夠互相參考着看。

完成

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

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

相關文章
相關標籤/搜索