go 語言入門

我先想分析一下現在有哪些公司使用go 語言,go語言在實際開發中有哪些使用場景,為什么要從其他語言轉換成go語言。我覺得這是學習一門新語言一個很重要的問題。

Go大概09年面世以來,已經有很多公司開始使用Go語言開發自己的服務,甚至完全轉向Go開發,也誕生了很多基于Go的服務和應用,比如Dokcer、k8s等,現在我們看下,有哪些大公司在用Go語言了。

【Google】? ?

這個不用多做介紹,作為開發Go語言的公司,當仁不讓。Google基于Go有很多優秀的項目,比如:https://github.com/kubernetes/kubernetes?,大家也可以在Github上?https://github.com/google/?查看更多Google的Go開源項目。

【七牛】? ? ? ? ? ? ? ? ?

整個產品(包括基礎服務、Web端、統計平臺、各類小工具等等),Go代碼行數占比:99.9%。七牛算是國內第一家選 Go 語言做服務端的公司。早在2011年,當Go語法還沒完全穩定下來的情況下,七牛就已經選擇將Go作為存儲服務端的主題語言。關于這點,七牛CEO許式偉談到:“我曾多次公開分享過Go語言的亮點,包括它的并發編程模型、對軟件工程的支持,以及對編程哲學的重塑。在我看來,Go對并發與分布式的支持算不上特別,所有新興的語言也都有工程化的思想,所以編程哲學的重塑才是Go語言獨樹一幟的根本原因,其它語言仍難以擺脫OOP或函數式編程的烙印,只有Go完全放棄了這些,對編程范式重新思考,對熱門的面向對象編程提供極度簡約但卻完備的支持。Go把其全新的編程理念,稱為面向連接的語言。作為一名老程序員,我認為Go的編程哲學獨具魅力,超越其它新興語言。前VMware云平臺的首席技術官Derek Collison,曾在2012年斷言Go語言將在兩年內制霸云計算。我認為他的說法略有激進,但和實際的發展趨勢吻合,Docker、CoreOS等新的云計算基礎設施都基于Go。在我看來,Go是互聯網時代的C語言,不僅會制霸云計算,10年內將會制霸整個IT領域?!?參考http://digi.163.com/14/1121/22/ABJV4BNU001618JV.html

【新浪微博】

中間件和彈性調度用 Java 和 Go 編寫,微博視頻轉碼及存儲服務用 Go 編寫。

【京東】

京東云消息推送系統用 Go 編寫

【嗶哩嗶哩】

參考:https://www.zhihu.com/question/65782086?如何看待嗶哩嗶哩用go語言重寫所有的java后臺工程?

【百度】

百度運維的一個BFE項目,負責前端流量的接入。他們的負責人在2016年有分享,大家可以看下這個?http://www.infoq.com/cn/presentations/application-of-golang-in-baidu-frontend?.其次就是百度的消息系統,從其最近的Golang招聘介紹就可以看出來. > 負責公司手百消息通訊系統服務器端開發及維護

【小米?】

小米對Golang的支持,莫過于運維監控系統的開源,也就是?http://open-falcon.com/?。此外,小米互娛、小米商城、小米視頻、小米生態鏈等團隊都在使用Golang。

Go適合用來做什么? ?

服務器編程:以前你如果使用C或者C++做的那些事情,用Go來做很合適,例如處理日志、數據打包、虛擬機處理、文件系統等。

分布式系統:數據庫代理器等 。

網絡編程:這一塊目前應用最廣,包括Web應用、API應用、下載應用、? 內存數據庫,前一段時間google開發的groupcache,couchbase的部分組建。

云平臺:目前國外很多云平臺在采用Go開發,CloudFoundy的部分組建,前VMare的技術總監自己出來搞的apcera云平臺。??

Go 的優點的體會 ?

為什么我會選擇Golang呢?

其實我在做出這個選擇之前已經花了大量時間做過詳盡調研。 國外如Google、AWS、Cloudflare、CoreOS等,國內如七牛、阿里等都已經開始大規模使用Golang開發其云計算相關產品。 跟著世界級巨人的腳步應該不至于走錯方向,而且在學習Golang的過程中,發現Golang入門非常簡單 。另外,云風博客中曾說過這樣一句話:“我發現我花了四年時間錘煉自己用 C 語言構建系統的能力,試圖找到一個規范,可以更好的編寫軟件。結果發現只是對 Go 的模仿。缺乏語言層面的支持,只能是一個拙劣的模仿?!眳⒖?https://blog.codingnow.com/2010/11/go_prime.html


go語言Mac安裝

Go有多種安裝方式:

Go源碼安裝:這是一種標準的軟件安裝方式。對于經常使用Unix類系統的用戶,尤其對于開發者來說,從源碼安裝可以自己定制。

Go標準包安裝:Go提供了方便的安裝包,支持Windows、Linux、Mac等系統。這種方式適合快速安裝,可根據自己的系統位數下載好相應的安裝包,一路next就可以輕松安裝了。推薦這種方式

第三方工具安裝:目前有很多方便的第三方軟件包工具,例如Ubuntu的apt-get和wget、Mac的homebrew等。這種安裝方式適合那些熟悉相應系統的用戶。

我們這里只介紹?homebrew 的安裝方式,我感覺這種最為簡單。

Homebrew是一款Mac OS平臺下的軟件包管理工具,擁有安裝、卸載、更新、查看、搜索等很多實用的功能。簡單的一條指令,就可以實現包管理,而不用你關心各種依賴和文件路徑的情況,十分方便快捷。

Install Homebrew,參考 https://brew.sh/

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安裝Homebrew 之后,安裝golang。

$ brew update && brew upgrade?

$ brew install go

打開終端,輸入下面命令查看是否安裝成功

go version

如果顯示類似的?

go version go1.11 darwin/amd64

那么恭喜你,安裝成功。

go 環境配置


1.打開終端,cd ~進入主目錄

2.ls -all查看所有文件,看是否存在.bash_profile文件

3.如果不存在,則執行touch .bash_profile新建

4.如果存在,則執行vi .bash_profile打開進行編輯

在文件中添加如下參數

export GOPATH=/Users/xxxxx/Go

export GOBIN=$GOPATH/bin

export PATH=$PATH:$GOBIN

保存編輯,然后在執行source ~/.bash_profile,完成環境變量的配置

go env查看我們配置成功后的環境變量


?GOPATH與工作空間

go 有三個子目錄這個目錄用來存放Go源碼,Go的可運行文件,以及相應的編譯之后的包文件。所以這個目錄下面有三個子目錄:src、bin、pkg

bin文件夾存放go install命名生成的可執行文件,可以把$GOPATH/bin路徑加入到PATH環境變量里,就和我們上面配置的$GOROOT/bin一樣,這樣就可以直接在終端里使用我們go開發生成的程序了。

pkg文件夾是存在go編譯生成的文件。

src存放的是我們的go源代碼,不同工程項目的代碼以包名區分。


go項目工程結構

配置好工作目錄后,就可以編碼開發了,在這之前,我們看下go的通用項目結構,這里的結構主要是源代碼相應地資源文件存放目錄結構。

我們知道源代碼都是存放在GOPATH的src目錄下,那么多個多個項目的時候,怎么區分呢?答案是通過包,使用包來組織我們的項目目錄結構。


如上,src目錄下跟著一個個域名命名的文件夾。再以github.com文件夾為例,它里面又是以github用戶名命名的文件夾,用于存儲屬于這個github用戶編寫的go源代碼。


那么我們如何引用一個包呢,也就是go里面的import。其實非常簡單,通過包路徑,包路徑就是從src目錄開始,逐級文件夾的名字用/連起來就是我們需要的包名,比如:


Hello World

都準備好了,讓我們創建一個hello項目,測試一下。

Go版Hello World非常簡單。在src/hellotest/目錄下運行go run hello.go命令就可以看到打印的輸出Hello World


下面解釋下這段代碼。
1.package 是一個關鍵字,定義一個包,和Java里的package一樣,也是模塊化的關鍵。?

2. main包是一個特殊的包名,它表示當前是一個可執行程序,而不是一個庫。?

3. import 也是一個關鍵字,表示要引入的包,和Java的import關鍵字一樣,引入后才可以使用它。?

4. fmt是一個包名,這里表示要引入fmt這個包,這樣我們就可以使用它的函數了。

?5. main函數是主函數,表示程序執行的入口,Java也有同名函數,但是多了一個String[]類型的參數。?

6. Println是fmt包里的函數,和Java里的system.out.println作用類似,這里輸出一段文字。

整段代碼非常簡潔,關鍵字、函數、包等和Java非常相似,不過注意,go是不需要以;(分號)結尾的。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,565評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,115評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,577評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,514評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,234評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,621評論 1 326
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,641評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,822評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,380評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,128評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,319評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,879評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,548評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,970評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,229評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,048評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,285評論 2 376

推薦閱讀更多精彩內容