go 語言入門

我先想分析一下現(xiàn)在有哪些公司使用go 語言柳畔,go語言在實際開發(fā)中有哪些使用場景,為什么要從其他語言轉(zhuǎn)換成go語言。我覺得這是學(xué)習(xí)一門新語言一個很重要的問題。

Go大概09年面世以來宪巨,已經(jīng)有很多公司開始使用Go語言開發(fā)自己的服務(wù),甚至完全轉(zhuǎn)向Go開發(fā)铣猩,也誕生了很多基于Go的服務(wù)和應(yīng)用揖铜,比如Dokcer、k8s等达皿,現(xiàn)在我們看下,有哪些大公司在用Go語言了贿肩。

【Google】? ?

這個不用多做介紹峦椰,作為開發(fā)Go語言的公司,當仁不讓汰规。Google基于Go有很多優(yōu)秀的項目汤功,比如:https://github.com/kubernetes/kubernetes?,大家也可以在Github上?https://github.com/google/?查看更多Google的Go開源項目溜哮。

【七盘辖穑】? ? ? ? ? ? ? ? ?

整個產(chǎn)品(包括基礎(chǔ)服務(wù)、Web端茂嗓、統(tǒng)計平臺餐茵、各類小工具等等),Go代碼行數(shù)占比:99.9%述吸。七牛算是國內(nèi)第一家選 Go 語言做服務(wù)端的公司忿族。早在2011年,當Go語法還沒完全穩(wěn)定下來的情況下蝌矛,七牛就已經(jīng)選擇將Go作為存儲服務(wù)端的主題語言道批。關(guān)于這點,七牛CEO許式偉談到:“我曾多次公開分享過Go語言的亮點入撒,包括它的并發(fā)編程模型隆豹、對軟件工程的支持,以及對編程哲學(xué)的重塑茅逮。在我看來璃赡,Go對并發(fā)與分布式的支持算不上特別簿煌,所有新興的語言也都有工程化的思想,所以編程哲學(xué)的重塑才是Go語言獨樹一幟的根本原因鉴吹,其它語言仍難以擺脫OOP或函數(shù)式編程的烙印姨伟,只有Go完全放棄了這些,對編程范式重新思考豆励,對熱門的面向?qū)ο缶幊烫峁O度簡約但卻完備的支持夺荒。Go把其全新的編程理念,稱為面向連接的語言良蒸。作為一名老程序員技扼,我認為Go的編程哲學(xué)獨具魅力,超越其它新興語言嫩痰。前VMware云平臺的首席技術(shù)官Derek Collison剿吻,曾在2012年斷言Go語言將在兩年內(nèi)制霸云計算。我認為他的說法略有激進串纺,但和實際的發(fā)展趨勢吻合丽旅,Docker、CoreOS等新的云計算基礎(chǔ)設(shè)施都基于Go纺棺。在我看來榄笙,Go是互聯(lián)網(wǎng)時代的C語言,不僅會制霸云計算祷蝌,10年內(nèi)將會制霸整個IT領(lǐng)域茅撞。” 參考http://digi.163.com/14/1121/22/ABJV4BNU001618JV.html

【新浪微博】

中間件和彈性調(diào)度用 Java 和 Go 編寫巨朦,微博視頻轉(zhuǎn)碼及存儲服務(wù)用 Go 編寫米丘。

【京東】

京東云消息推送系統(tǒng)用 Go 編寫

【嗶哩嗶哩】

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

【百度】

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

【小米?】

小米對Golang的支持靶累,莫過于運維監(jiān)控系統(tǒng)的開源,也就是?http://open-falcon.com/?癣疟。此外挣柬,小米互娛、小米商城睛挚、小米視頻邪蛔、小米生態(tài)鏈等團隊都在使用Golang。

Go適合用來做什么? 扎狱?

服務(wù)器編程:以前你如果使用C或者C++做的那些事情侧到,用Go來做很合適勃教,例如處理日志、數(shù)據(jù)打包匠抗、虛擬機處理故源、文件系統(tǒng)等。

分布式系統(tǒng):數(shù)據(jù)庫代理器等 汞贸。

網(wǎng)絡(luò)編程:這一塊目前應(yīng)用最廣绳军,包括Web應(yīng)用、API應(yīng)用矢腻、下載應(yīng)用门驾、? 內(nèi)存數(shù)據(jù)庫,前一段時間google開發(fā)的groupcache多柑,couchbase的部分組建奶是。

云平臺:目前國外很多云平臺在采用Go開發(fā),CloudFoundy的部分組建竣灌,前VMare的技術(shù)總監(jiān)自己出來搞的apcera云平臺聂沙。??

Go 的優(yōu)點的體會 ?

為什么我會選擇Golang呢帐偎?

其實我在做出這個選擇之前已經(jīng)花了大量時間做過詳盡調(diào)研逐纬。 國外如Google、AWS削樊、Cloudflare、CoreOS等兔毒,國內(nèi)如七牛漫贞、阿里等都已經(jīng)開始大規(guī)模使用Golang開發(fā)其云計算相關(guān)產(chǎn)品。 跟著世界級巨人的腳步應(yīng)該不至于走錯方向育叁,而且在學(xué)習(xí)Golang的過程中迅脐,發(fā)現(xiàn)Golang入門非常簡單 。另外豪嗽,云風(fēng)博客中曾說過這樣一句話:“我發(fā)現(xiàn)我花了四年時間錘煉自己用 C 語言構(gòu)建系統(tǒng)的能力谴蔑,試圖找到一個規(guī)范,可以更好的編寫軟件龟梦。結(jié)果發(fā)現(xiàn)只是對 Go 的模仿隐锭。缺乏語言層面的支持,只能是一個拙劣的模仿计贰∏账”參考?https://blog.codingnow.com/2010/11/go_prime.html


go語言Mac安裝

Go有多種安裝方式:

Go源碼安裝:這是一種標準的軟件安裝方式。對于經(jīng)常使用Unix類系統(tǒng)的用戶躁倒,尤其對于開發(fā)者來說荞怒,從源碼安裝可以自己定制洒琢。

Go標準包安裝:Go提供了方便的安裝包,支持Windows褐桌、Linux衰抑、Mac等系統(tǒng)。這種方式適合快速安裝荧嵌,可根據(jù)自己的系統(tǒng)位數(shù)下載好相應(yīng)的安裝包呛踊,一路next就可以輕松安裝了。推薦這種方式

第三方工具安裝:目前有很多方便的第三方軟件包工具完丽,例如Ubuntu的apt-get和wget恋技、Mac的homebrew等。這種安裝方式適合那些熟悉相應(yīng)系統(tǒng)的用戶逻族。

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

Homebrew是一款Mac OS平臺下的軟件包管理工具聘鳞,擁有安裝薄辅、卸載、更新抠璃、查看站楚、搜索等很多實用的功能。簡單的一條指令搏嗡,就可以實現(xiàn)包管理窿春,而不用你關(guān)心各種依賴和文件路徑的情況,十分方便快捷采盒。

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 環(huán)境配置


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

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

3.如果不存在叉橱,則執(zhí)行touch .bash_profile新建

4.如果存在挫以,則執(zhí)行vi .bash_profile打開進行編輯

在文件中添加如下參數(shù)

export GOPATH=/Users/xxxxx/Go

export GOBIN=$GOPATH/bin

export PATH=$PATH:$GOBIN

保存編輯,然后在執(zhí)行source ~/.bash_profile赏迟,完成環(huán)境變量的配置

go env查看我們配置成功后的環(huán)境變量


?GOPATH與工作空間

go 有三個子目錄這個目錄用來存放Go源碼屡贺,Go的可運行文件,以及相應(yīng)的編譯之后的包文件。所以這個目錄下面有三個子目錄:src甩栈、bin泻仙、pkg

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

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

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


go項目工程結(jié)構(gòu)

配置好工作目錄后袭灯,就可以編碼開發(fā)了刺下,在這之前,我們看下go的通用項目結(jié)構(gòu),這里的結(jié)構(gòu)主要是源代碼相應(yīng)地資源文件存放目錄結(jié)構(gòu)稽荧。

我們知道源代碼都是存放在GOPATH的src目錄下橘茉,那么多個多個項目的時候,怎么區(qū)分呢姨丈?答案是通過包畅卓,使用包來組織我們的項目目錄結(jié)構(gòu)。


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


那么我們?nèi)绾我靡粋€包呢,也就是go里面的import沐绒。其實非常簡單一膨,通過包路徑,包路徑就是從src目錄開始洒沦,逐級文件夾的名字用/連起來就是我們需要的包名,比如:


Hello World

都準備好了价淌,讓我們創(chuàng)建一個hello項目申眼,測試一下。

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


下面解釋下這段代碼括尸。
1.package 是一個關(guān)鍵字,定義一個包病毡,和Java里的package一樣濒翻,也是模塊化的關(guān)鍵。?

2. main包是一個特殊的包名,它表示當前是一個可執(zhí)行程序有送,而不是一個庫淌喻。?

3. import 也是一個關(guān)鍵字,表示要引入的包雀摘,和Java的import關(guān)鍵字一樣裸删,引入后才可以使用它。?

4. fmt是一個包名阵赠,這里表示要引入fmt這個包涯塔,這樣我們就可以使用它的函數(shù)了。

?5. main函數(shù)是主函數(shù)清蚀,表示程序執(zhí)行的入口匕荸,Java也有同名函數(shù),但是多了一個String[]類型的參數(shù)枷邪。?

6. Println是fmt包里的函數(shù)榛搔,和Java里的system.out.println作用類似,這里輸出一段文字齿风。

整段代碼非常簡潔药薯,關(guān)鍵字、函數(shù)救斑、包等和Java非常相似童本,不過注意,go是不需要以;(分號)結(jié)尾的脸候。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末穷娱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子运沦,更是在濱河造成了極大的恐慌泵额,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件携添,死亡現(xiàn)場離奇詭異嫁盲,居然都是意外死亡,警方通過查閱死者的電腦和手機烈掠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門羞秤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人左敌,你說我怎么就攤上這事瘾蛋。” “怎么了矫限?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵哺哼,是天一觀的道長佩抹。 經(jīng)常有香客問我,道長取董,這世上最難降的妖魔是什么棍苹? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮甲葬,結(jié)果婚禮上廊勃,老公的妹妹穿的比我還像新娘。我一直安慰自己经窖,他們只是感情好坡垫,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著画侣,像睡著了一般冰悠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上配乱,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天溉卓,我揣著相機與錄音,去河邊找鬼搬泥。 笑死桑寨,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的忿檩。 我是一名探鬼主播尉尾,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼燥透!你這毒婦竟也來了沙咏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤班套,失蹤者是張志新(化名)和其女友劉穎肢藐,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吱韭,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡吆豹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了理盆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瞻讽。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖熏挎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情晌砾,我是刑警寧澤坎拐,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響哼勇,放射性物質(zhì)發(fā)生泄漏都伪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一积担、第九天 我趴在偏房一處隱蔽的房頂上張望陨晶。 院中可真熱鬧,春花似錦帝璧、人聲如沸先誉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽褐耳。三九已至,卻和暖如春渴庆,著一層夾襖步出監(jiān)牢的瞬間铃芦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工襟雷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留刃滓,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓耸弄,卻偏偏與公主長得像咧虎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子叙赚,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容