go 語言入門

碼農(nóng)甲IP屬地: 浙江
字?jǐn)?shù) 2,701

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

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

【Google】? ?

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

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

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

【新浪微博】

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

【京東】

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

【嗶哩嗶哩】

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

【百度】

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

【小米?】

小米對Golang的支持,莫過于運(yùn)維監(jiān)控系統(tǒng)的開源,也就是?http://open-falcon.com/?。此外,小米互娛、小米商城、小米視頻、小米生態(tài)鏈等團(tuán)隊(duì)都在使用Golang。

Go適合用來做什么? ?

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

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

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

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

Go 的優(yōu)點(diǎn)的體會(huì) ?

為什么我會(huì)選擇Golang呢?

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


go語言Mac安裝

Go有多種安裝方式:

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

Go標(biāo)準(zhǔn)包安裝: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平臺(tái)下的軟件包管理工具,擁有安裝、卸載、更新、查看、搜索等很多實(shí)用的功能。簡單的一條指令,就可以實(shí)現(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 ~進(jìn)入主目錄

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

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

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

在文件中添加如下參數(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 有三個(gè)子目錄這個(gè)目錄用來存放Go源碼,Go的可運(yùn)行文件,以及相應(yīng)的編譯之后的包文件。所以這個(gè)目錄下面有三個(gè)子目錄:src、bin、pkg

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

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

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


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

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

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


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


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


Hello World

都準(zhǔn)備好了,讓我們創(chuàng)建一個(gè)hello項(xiàng)目,測試一下。

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


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

2. main包是一個(gè)特殊的包名,它表示當(dāng)前是一個(gè)可執(zhí)行程序,而不是一個(gè)庫。?

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

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

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

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

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

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

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