多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > 互聯(lián)網(wǎng) > 七牛首席布道師:Go不是在顛覆,就是在逆襲

七牛首席布道師:Go不是在顛覆,就是在逆襲

來源:程序員人生   發(fā)布時間:2014-09-17 06:21:05 閱讀次數(shù):3072次

Go 語言是谷歌 2009 年首次推出并在 2012 年正式發(fā)布的一種全新的編程語言,可以在不損失應(yīng)用程序性能的情況下降低代碼的復(fù)雜性。谷歌首席軟件工程師羅布派克(Rob Pike)說:我們之所以開發(fā) Go,是因為過去10多年間軟件開發(fā)的難度令人沮喪。Google 對 Go 寄予厚望,其設(shè)計是讓軟件充分發(fā)揮多核心處理器同步多工的優(yōu)點,并可解決面向?qū)ο蟪绦蛟O(shè)計的麻煩。它具有現(xiàn)代的程序語言特色,如垃圾回收,幫助開發(fā)者處理瑣碎但重要的內(nèi)存管理問題。Go 的速度也非???,幾乎和 C 或 C++ 程序一樣快,且能夠快速開發(fā)應(yīng)用程序。

7月30日的在線培訓(xùn)《Go語言編程》,七牛云存儲聯(lián)合創(chuàng)始人兼首席布道師徐立(@飛天急速徐倒立)將帶來 Go 的前世今生與 Go 語言編程的基礎(chǔ)教學(xué),以及七牛云存儲應(yīng)用 Go 的實踐分享。報名地址:http://huiyi.csdn.net/activity/product/goods_list?project_id=1202

在課程開始前,CSDN 對徐立進行了簡單的采訪。七牛云存儲是用 Go 語言開發(fā)實現(xiàn)的,而七??梢哉f是全球第一個最早用 Go 吃螃蟹還吃得很香的大玩家。徐立認為 Go 是劃時代的,唯有 Go 能成為史詩之絕唱!Go 不是在顛覆,就是在逆襲!Go 在當(dāng)下必然大有可為,大有作為,事在人為。

七牛云存儲聯(lián)合創(chuàng)始人兼首席技術(shù)顧問和首席布道師 徐立
七牛云存儲聯(lián)合創(chuàng)始人兼首席布道師 徐立

請您先簡單和大家介紹一下自己,能談?wù)勀募夹g(shù)成長歷程嗎?


Hi,大家好!我叫徐立,默默無聞至今做了十年碼農(nóng),必須感謝漫長的碼農(nóng)歲月在侵蝕我花樣年華的同時又栽培了我,如今依然還是一個充滿技術(shù)理想情懷的熱血青年!同時,也是一個想用更好的技術(shù)創(chuàng)造出一些更加美好體驗的互聯(lián)網(wǎng)創(chuàng)業(yè)者。當(dāng)前,我與我的團隊們正在一起努力鑄造 “計算機網(wǎng)絡(luò)世界里邊同時也是我們這個星球上最具特色并還可以更加驚艷的數(shù)據(jù)倉儲及物流系統(tǒng)” ――七牛云存儲,一款為廣大應(yīng)用開發(fā)者一站式解決文件加速上傳和加速下載以及個性化云端數(shù)據(jù)處理的云服務(wù),目標是讓天下沒有難寫的代碼和難搞的運維,以此可以讓廣大應(yīng)用開發(fā)者過上 “Lazy coding, happy life!” 的幸福美好生活。

我在中學(xué)年間開始接觸編程,那時從網(wǎng)上偶爾接點活兒掙點游戲點卡和零花錢,從早前比較偏向?qū)嵱霉δ艿臉I(yè)務(wù)層應(yīng)用開發(fā)(比如軟件和 Web )做到后來比較底層的系統(tǒng)技術(shù)(比如分布式計算和存儲),對于互聯(lián)網(wǎng)技術(shù)日新月異的發(fā)展一直保持著敬畏與追隨。在中國互聯(lián)網(wǎng)發(fā)展演進的這十幾年間,快速經(jīng)歷了桌面軟件,PC 互聯(lián)網(wǎng),移動互聯(lián)網(wǎng),互聯(lián)網(wǎng)硬件,云計算服務(wù)這樣一個快速變革的時代,算是一個在互聯(lián)網(wǎng)高速成長的時代背景下土生土長出來外表粉嫩內(nèi)心滄桑的程序員。如果要采訪我和電腦摩擦相愛了至少十年為什么還是這么年輕粉嫩?我會毫不遲疑地告訴你能夠抵擋歲月無情摧殘的唯有激情與才華,還有夢想。由于現(xiàn)階段的工作需要,不少精力都投放在與互聯(lián)網(wǎng)前沿技術(shù)相關(guān)的學(xué)習(xí)與分享交流,比如最近分享的 Docker 和 Go 的話題。我喜歡把經(jīng)過實踐檢驗后沉淀下來的美好事物分享給大家,俗稱布道師,當(dāng)前也是七牛的首席布道師。如果你同樣也是一個有著技術(shù)理想情懷的熱血青年,相信我在當(dāng)下這樣一個技術(shù)驅(qū)動變革的時代你不是一個人在騷動,如果你已經(jīng)按耐不住心中的喜悅和熱情,歡迎聯(lián)系我(xl@qiniu.com),歡迎來到七牛。七牛,不只是幾頭牛,你會發(fā)現(xiàn)更多!

您是從何時開始關(guān)注 Go 語言?是什么原因促使你們團隊決定使用 Go 語言?以及是什么原因促成了《Go語言編程》這本書呢?


2009 年 11 月 Google 首次對外公開透露 Go 的存在后,就一直有保持關(guān)注。但真正開始使用 Go 語言大規(guī)模投產(chǎn)是在 2011 年上半年,當(dāng)時是在和我們團隊的早期成員使用 Go 語言研發(fā)分布式對象存儲系統(tǒng)。

與此同時,市面上幾乎沒有發(fā)現(xiàn)和我們一樣這么大規(guī)模玩 Go 語言的個體或組織??陀^地說,我們這樣做的確很冒險,連 Google 官方當(dāng)時也沒有這么干,且 Go 語言官方正式版都尚未發(fā)布,Google 發(fā)布 Go 1.0 是在過了一年之后。記得項目啟動早期,我們對于要不要使用這么一門還在萌芽生長狀態(tài)的編程語言來構(gòu)建線上的大規(guī)模系統(tǒng),內(nèi)部成員曾各抒己見略有爭議。后來根據(jù)我們團隊成員的經(jīng)驗自我剖析判斷下來,確定這事可行 。原本存儲系統(tǒng)我們做過好幾遍,實際也跑過幾個線上大規(guī)模運營的自研存儲系統(tǒng),且成員資歷都是十幾年的資深研發(fā)工程師(只有我個人資歷最小當(dāng)時還不到十年)。且早前我們在 2006 年嘗試使用 C++ 開發(fā)分布式存儲系統(tǒng),后來又有嘗試使用 Erlang 替代,直到后來我們注意到問世不久的 Go 讓我們是既興奮驚喜又相見恨晚。在被 C++ 實現(xiàn)并發(fā)編程框架折騰得夠嗆之后,又遇到天生為并發(fā)而生的 Erlang,但實際上又被 Erlang 不能滿足我們預(yù)期的高性能計算而堪折;而當(dāng)遇到 Go 并實際寫了一些程序測試檢驗過之后,發(fā)現(xiàn)不但用 Go 編程寫代碼很順溜很開心,關(guān)鍵在執(zhí)行效率和性能上也是非一般地驚艷。一個把 C++ 的性能優(yōu)勢以及 Erlang 天生的并發(fā)特性相融合的產(chǎn)物,且語法語義上要比 C++ 或 Erlang 簡約不止幾個數(shù)量級的編程語言,同時還是一幫世界上頂尖大牛的巔峰之作以及 Google 的大力投入支持,還有經(jīng)過我們這群愛折騰的碼農(nóng)呆瓜們充分的測試和檢驗得以確認,何樂而不為。常言道實踐出真知,并不是我們盲目冒險決策用 Go,只不過是我們早在幾年之前第一個吃了螃蟹且經(jīng)實踐檢驗得出了的明確的結(jié)論而已。

當(dāng)初使用 Go 語言編程的時候,市面上除了官方網(wǎng)站公開可查閱的文檔以外,可以參考的資料讀物相當(dāng)甚少,團隊成員也是現(xiàn)學(xué)現(xiàn)用彼此交流互補。早期其實并沒有誕生寫書的想法,只是覺得公司團隊壯大起來以后一定需要有份系統(tǒng)的文檔手冊方便新人上手學(xué)習(xí),對我們自己來講這本身就是一個強烈的剛需,沒有任何理由不去執(zhí)行。然而,后來內(nèi)容越寫越豐富,微博上等技術(shù)圈子里也知道七牛用 Go 且很吃香,就有出版社機構(gòu)慕名前來找到我們,再后來就有了出書這回事兒。但在當(dāng)時,我們只有為數(shù)不多的幾個人,都是研發(fā)重活攬了一堆事情,是寫代碼趕工期還是出書是個很糾結(jié)的態(tài)度取向問題。在經(jīng)過團隊成員一致達成共識后,秉著 “技術(shù)驅(qū)動創(chuàng)新”,“美好的事物就該分享”,“獨樂樂不如眾樂樂”,“一個人走得雖快但一群人才能走得更快更穩(wěn)” 等一系列等推動人類文明向前發(fā)展的各種雞湯洗禮陶醉之后,我們自發(fā)地默同接受新增任務(wù)并開始組織團隊協(xié)作完善《Go語言編程》一書,開放分享技術(shù)經(jīng)驗心得的同時收獲反饋和喜悅,希望有更多的人和組織能夠參與進來用 Go 去譜寫他們的故事和美妙篇章。后來,事實也的確證明:越來越多的個人和組織以及大大小小的互聯(lián)網(wǎng)公司都開始使用 Go 語言去承載他們的海量業(yè)務(wù),以及聽聞個別開發(fā)者終于習(xí)得 Go 心經(jīng)之后實現(xiàn)了他們內(nèi)心積壓已久的技術(shù)理想。海外甚至都開始有長篇大論開始分析探討 “Why is Golang popular in China?”,用 Google 搜索 Golang 熱度最高的至今一直是中國。放到當(dāng)時去看,這塊大陸是有多么荒蕪;今天再回過頭來看,江山又是如此多嬌。盡管當(dāng)時白天要忙寫代碼晚上要忙寫書最終倉促出版留下了些許審校上的遺憾,但不管怎樣,那都是一段義無反悔的鏗鏘歲月。

Go 語言的哪些特點最吸引您?


并發(fā)

Go 最大的特色就是在語言層面天生支持并發(fā),不需要像其他大多數(shù)編程語言那樣需要開發(fā)者自行實現(xiàn)或借助第三方類庫實現(xiàn)并發(fā)編程,Go 在語言級別支持的并發(fā)編程,其邏輯簡化得通俗易懂簡單好上手。

性能

不同于大多數(shù)腳本或解釋性的高階編程語言,用 Go 編寫的代碼直接了當(dāng)編譯成機器碼高效執(zhí)行。

簡潔

25 個關(guān)鍵字即表達你能想到的所有招式,沒有也不需要有任何多余,想干啥事就 go 一下。

跨平臺

x86、AMD64 (x86_64)、ARM;Linux、Windows、Darwin (OSX)、FreeBSD、Android (計劃Go 1.4) 幾乎全平臺支持,真正做到一份源碼,隨處編譯,到處運行。

Go 語言都有哪些常見的應(yīng)用場景?


作為一個 Go 語言的重度用戶來看,當(dāng)前除了不適合拿來造操作系統(tǒng)以外在操作系統(tǒng)之上應(yīng)用級的事情都能干。再更具體一點,比如說適用于這樣一些使用場景:

系統(tǒng)應(yīng)用

以前要用 C/C++ 做的系統(tǒng)應(yīng)用,現(xiàn)在都可以用 Go 來寫,事半功倍,而且 Go 完美包容 C 源代碼,兩者互相調(diào)用還可以混合編譯從而無縫集成。

網(wǎng)絡(luò)應(yīng)用

包含了常見的服務(wù)端編程比如 Web 和 API Service,以前用 PHP / Python / Ruby / Java 干的事情現(xiàn)在都可以用 Go 更加簡單清晰的來寫。再比如還可以拿來做一些 Proxy(代理)如網(wǎng)絡(luò)穿透軟件等,你懂的。

分布式系統(tǒng)

基于 Go 強大的系統(tǒng)編程加網(wǎng)絡(luò)編程,打造各種跨網(wǎng)絡(luò)的分布式系統(tǒng)服務(wù),Go 社區(qū)有不少和分布式系統(tǒng)相關(guān)的開源產(chǎn)物。

各種形態(tài)的存儲和數(shù)據(jù)庫應(yīng)用

比如 groupcache,influxdb 等。

客戶端應(yīng)用

包括帶界面的桌面軟件,以及后續(xù)可以想像的移動端應(yīng)用(比如對 Android 的支持)。

云服務(wù)(PaaS)

如基于 Go 打造的七牛云存儲(分布式對象存儲系統(tǒng)),比如基于 Go 編寫的 Docker(一款開源的容器虛擬化產(chǎn)物)。

Go 能做的事情,包含但不限于以上羅列的使用場景。

Go 語言在七牛中都開發(fā)了些什么服務(wù)?在七牛的代碼量中,Go 語言使用占多少比例?


我們主要使用 Go 開發(fā)了以下服務(wù)和工具:

  • 分布式存儲系統(tǒng) ( Distributed Key/Value Storage)
  • 數(shù)據(jù)處理服務(wù) (Data Processing)
  • 網(wǎng)絡(luò)接口服務(wù) (RESTful API Service)
  • 消息隊列服務(wù)(Message Queue Service)
  • 日志處理系統(tǒng) (Log Service)
  • Web 網(wǎng)站 (不含前端 JavaScript)
  • CLI 命令行和 GUI 圖形界面工具
  • 其他輔助工具

總的來講,Go 在我們七牛的工程中代碼覆蓋率超過 90% 。還有 10% 不能覆蓋的原因是我們給開發(fā)者自助使用的 Web 界面需要用 JavaScript 編程來實現(xiàn)酷炫的前端,以及我們?yōu)殚_發(fā)者準備了多達超過 10 種編程語言的 SDK 。

Go 有哪些成功的開源項目?都有哪些公司在使用?


Go 比較熱門的開源項目,不完全羅列舉例:

  • docker - 基于 Linux 容器技術(shù)的虛擬化實現(xiàn),能夠輕易實現(xiàn) PaaS 平臺的搭建
  • packer - vagrant 的作者開源的用來生成不同平臺的鏡像文件,例如 QEMU、KVM、Xen、VM、vbox、AWS 等
  • drone - 基于 docker 構(gòu)建的持續(xù)集成測試平臺,類似 jenkins-ci
  • libcontainer - docker 官方開源用 Go 實現(xiàn)的 Linux Containers
  • tsuru - 開源的 PaaS 平臺,類似 GAE、SAE
  • groupcache - Memcached 作者(Brad Fitzpatrick) 寫的用于 dl.google.com 線上使用的緩存系統(tǒng)
  • nsq - bit.ly 開源的高性能消息隊列系統(tǒng),用以每天處理數(shù)十億條的消息
  • influxdb - 開源分布式時序、事件和指標數(shù)據(jù)庫
  • heka - Mozilla 開源的日志處理系統(tǒng)
  • doozer - 分布式同步工具,類似 ZooKeeper
  • etcd - 高可用的 Key/Value 存儲系統(tǒng),主要用于分享配置和服務(wù)發(fā)現(xiàn)。靈感來自于 ZooKeeper 和 Doozer
  • goandroid - 使之用 Go 編寫動態(tài)庫,在原生的 Android 應(yīng)用中運行
  • mandala - 基于 goandroid 的工具鏈,用 Go 編寫原生的 Android 應(yīng)用的一個便捷框架
  • beego - 國內(nèi) Go 開發(fā)者開發(fā)的 Web 開發(fā)框架
  • revel - 另一個高產(chǎn)的 Web 開發(fā)框架,類似 Java Play Framework

更多: https://code.google.com/p/go-wiki/wiki/Projects

用 Go 的公司,不完全羅列舉例:

國外:

  • Google、YouTube、Dropbox、dotCloud、10gen、Apcera、Mozilla、Heroku、Github、Bitbucket、Bitly、CloudFlare、Cloud Foundry、Flipboard、Disqus、SendGrid、Tumblr、Zynga、Soundcloud

  • 更多:https://code.google.com/p/go-wiki/wiki/GoUsers

國內(nèi):

  • 七牛云存儲、京東云平臺、盛大云CDN、仙俠道、金山微看、Weico、西山居、美團、豆瓣、小米商城、360

  • 更多:https://github.com/qiniu/go/issues/15

在本年度 2014 Androiday.Org 開發(fā)者大會上,您有個主題演講提到了 Go 對 Android 的支持,能否與我們分享一下這塊的研究心得?


這是一個很有趣的話題,尤其是在今年6月份相繼召開了 APPLE WWDC 2014 和 Google I/O 2014 兩場舉世聞名的互聯(lián)網(wǎng)科技盛會后,APPLE 發(fā)布了用于 iOS 下一代編程的 Swift 語言,這給關(guān)注 Android 的開發(fā)者們留下了無限的遐想,盡管后來驚喜并沒有如人們預(yù)期一樣出現(xiàn)。作為一個純潔的 Android 程序員,大概不會關(guān)注到 Go 將要支持 Android 的消息;作為一個無邪的 Go 程序員,大概也不會去關(guān)心 Android 開發(fā)和未來。但戲劇性的就是,我們當(dāng)下就是處于這樣一個各種跨界的大融合時代,沒有什么不可能。

由于 Go 是跨平臺編譯的,早前就有在 ARM 上編譯 Go 并成功運行的嘗試。這個嘗試是直接將用 Go 編寫的源代碼在 ARM 環(huán)境下編譯,然后調(diào)用 adb shell 裝入 Android 里邊作為 Linux 下的可執(zhí)行文件運行,但是沒法關(guān)聯(lián)支持 JNI(Java Native Interface),只能作為一個獨立的進程運行,然后通過 RPC、TCP 等協(xié)議方式通信,相當(dāng)于是一個 App 在運行方式上分成了兩部分,這樣非常不利于 App 的狀態(tài)管理,所以此方式無法用 Go 編寫出無縫結(jié)合的 Android 應(yīng)用。

然而,單方面想要用 Go 語言封裝 Android SDK 更是難以行通的:Android 原本用 Java 封裝的 SDK,包含了海量的 API 接口。如果是手工封裝會導(dǎo)致功能上的欠缺,自動封裝會讓 Go 語言變得丑陋不堪。不管用哪種方式,都很難快速實現(xiàn)。若是用 Go 再實現(xiàn)一遍 Android SDK 且還想期望能與 Java 等效,這幾乎是不可能的事情。

但實際上,Android 系統(tǒng)提供了兩種開發(fā)包:SDK 和 NDK。用 Go 移植 Android SDK 不通,還可以嘗試走 Android NDK 。

Android NDK(Native Development Kit )是一套開發(fā)工具集合,允許開發(fā)者用像 C/C++ 語言那樣實現(xiàn)應(yīng)用程序的一部分。然后可以通過 JNI 實現(xiàn) Java 代碼與 NDK 動態(tài)庫的無縫集成。

Go 內(nèi)置 Cgo,使得 Go 和 C 之間可以無縫地互相轉(zhuǎn)換和調(diào)用,以及代碼混合編譯。僅此一點,就可以看出至少也為 Go 進行 Android NDK 開發(fā)奠定了基礎(chǔ)。當(dāng)然,Go 可以進行的擴展嘗試可可以更多。

后續(xù)的嘗試是另辟蹊徑走 Android NDK,借助其可以將動態(tài)庫 .so 和 Java 代碼一起打包成 apk 的機制,實現(xiàn)在 Android 上的無縫加載和運行。所以,問題簡化成只要 Go 能夠編譯出 .so 動態(tài)庫再通過 Android NDK 就可以實現(xiàn)開發(fā) Android 應(yīng)用程序了。

Go 是一門純粹靜態(tài)類型的編程語言,編譯出來的二進制是靜態(tài)的,如何構(gòu)建動態(tài)庫,這是一道坎。不過 Go 社區(qū)的欣欣向榮完全超出你我的想像,比如 Go 社區(qū)里邊有人發(fā)布了個開源項目叫 Goandroid,一個擴展了 Go 的工具鏈和運行庫來支持將 Go 代碼創(chuàng)建動態(tài)庫(*.so)的工具。另外一個開源項目 Mandala 則是在基于 Goandroid 的工具鏈構(gòu)建了一套完善的用 Go 開發(fā)原生 Android 應(yīng)用的開發(fā)框架。

Goandroid 和 Mandala 的出現(xiàn)已經(jīng)讓 Go 開發(fā)原生 Android 應(yīng)用成為現(xiàn)實。 盡管這兩個框架都是 Go 社區(qū)由個人發(fā)起的開源項目,Go 官方尚未參與,不過 Go 已經(jīng)打開了 Android 的潘多拉魔盒。

另外,可以再來扒一扒和技術(shù)無關(guān)的業(yè)界新聞。

2014 年 5 月,一場已經(jīng)持續(xù) 4 年的官司:關(guān)于“Google 在 Android 平臺使用 Java 侵犯知識產(chǎn)權(quán)”一案,聯(lián)邦法院判定 Oracle 獲勝。

2014 年 6 月,APPLE 公司在 WWDC 2014 上發(fā)布 Swift 編程語言,用來替代 Objective-C 更高效地編寫 iOS 和 OS X 程序。

2014 年 6 月,Google 公司 Go 語言開發(fā)團隊成員 David Crawshaw 提議下一個 Go 版本 ( Go 1.4 ) 支持 Android 平臺。這算是一個關(guān)于 Go 支持 Android 而言相當(dāng)擲地有聲的宣稱。文獻詳見:http://golang.org/s/go14android

就目前而言,Go 支持 Android 后可以干啥。簡單來講,Go 以支持 Android NDK 編程作為切入點,自然是可以在 NDK 這層注入 Go 所能帶來的新鮮活力,比如在異步的并發(fā)編程上用 channels 而不再是 callbacks 通訊,比如為游戲引擎提供底層的高性能支撐,比如跟多媒體相關(guān)的更豐富地處理。所以,可以想像的到 Go 是可以引領(lǐng) Android NDK 迎來一片生機盎然的春天。

Go 支持 Android 這事當(dāng)前看起來是 Go 的一廂情愿,而 Android 對此結(jié)合似乎還無動于衷。然而, Android 背負的包袱畢竟過重。Go 躍出的一小步,開啟的必然會是 Android 海闊天空的一大步。

談?wù)勀鷤€人對 Go 語言的理解和看法?


盡管 Go 是一門問世不久顯得很新的編程語言,有很多質(zhì)疑的聲音認為新生的事物就是不成熟就此望而卻步。但在我個人看來,考量成熟的因素并不完全取決于它所經(jīng)歷和走過的歲月,而是在于它是否可以被當(dāng)下這個時代所需要并賦予厚望,以及其心智和能力是否能夠承載并擔(dān)當(dāng)?shù)闷疬@份榮耀與責(zé)任。

在我們今天這個時代,是一個包含了 PC 互聯(lián)網(wǎng)、移動互聯(lián)網(wǎng)、物聯(lián)網(wǎng)和云計算 “四世同堂” 的技術(shù)多元盛世。在不曾久遠的過去,此前的數(shù)十年間,沒有哪一門編程語言能夠經(jīng)得起此般歲月的幾經(jīng)摧殘而長生不老。70 年代就開始基業(yè)長青的 C,書寫了整個單機時代的輝煌,在硬件更新?lián)Q代多核一度再翻成指數(shù)級更迭又如此瞬息萬變的今天,C 那副認真憔悴的注目神情所表達的靜靜默守和激流勇退才終歸得以明白它曾有過的卓絕。而 Java / Python / PHP / Ruby 此前彼后所縱橫的 PC Web 時代,以當(dāng)下之勢在此不可逆轉(zhuǎn)的時代背景下正似歲月如梭般地離我們漸行老去。而當(dāng)移動互聯(lián)網(wǎng)悄然踏至的那一時刻,Android 勢如破竹般地野蠻生長搭救了 Java 一命并在其身上傾覆了所有,換來的卻不過是一份難以割舍又無法言痛的沉重愛情,在被包養(yǎng)換主后的 Java 擦傷了貞潔之后不得不忍辱負重潸然淚行,而 Java 也從此難以走下一座叫作 “節(jié)操” 的斷背深山。而和 Java 長得很像極帥的那位 JavaScript,意氣風(fēng)發(fā)一竿子捅到底逆襲了整個 Web 后端,討得所有 Web 前端開發(fā)者的擁簇和狂歡,眼看高舉全棧工程大旗就要翻手為云覆手為雨,卻優(yōu)秀得不懂克己錯失風(fēng)向與當(dāng)下這個多核時代格格不入,曾一度與 HTML5 結(jié)隊合唱 “輕應(yīng)用就是未來” 這一出雙簧,不料 Apple Swift 以迅雷不及掩耳之勢以逆襲之道還治其逆襲之身;如今既生 Go,又何生 NodeJS,感慨 Node 君真是生不逢時??傊瑔柧苡袔锥喑?,掐指一算,不知諸君該何去何從……

雖群雄逐鹿,現(xiàn)百家爭鳴,然亂世必有新生。 Go 有如清水出芙蓉,一個曾在溫柔的歲月里深沉熟睡,爾后隨著換季時節(jié)的輕聲絮語呼喚蘇醒,然后起身剎那之間不經(jīng)意驚艷了時光,此后就在此應(yīng)時之季嬌艷綻放,隨后波光花影,激蕩漣漪,滿是春意盎然,勃勃生機。

時光往回倒流近二十年,那是 1995 年,有幾位計算機泰斗,在白紙上畫了一個圈,開啟了分布式系統(tǒng)編程時代的春天。那時還在貝爾實驗室參與九號計劃(Plan9)的 Robert C. Pike(Plan9 操作系統(tǒng)和 UTF-8 的共同設(shè)計者,分布式編程語言 Limbo 作者) 和 Kenneth Lane Thompson(1983年圖靈獎得主,創(chuàng)建了 UNIX 和 Plan9 操作系統(tǒng),B 語言和 C 語言的共同設(shè)計者,UTF-8 的共同設(shè)計者),在此段工作經(jīng)歷中開發(fā)了分布式網(wǎng)絡(luò)操作系統(tǒng) Inferno,并在此之上實現(xiàn)了分布式編程語言 Limbo,這是能夠追溯到最早和后來的 Go 在功能特性上比較相似的前身。隨后這兩位泰斗相繼都加入了 Google 公司,在 2007 年 9 月,這兩位 Unix 和 C 還有 UTF-8 的始祖成員,再加上 Javascript V8 引擎和 Java HotSpot 編譯器的作者 Robert Griesemer 一起,這 3 人小組設(shè)計了最初的 Go 語言雛形。此后,Go 語言逐漸吸引了一些業(yè)界優(yōu)秀人物比如 80 后程序員 Brad Fitzpatrick(Memcached 作者,OpenID 協(xié)定者)的加入,Go 的團隊陣營逐漸壯大。從 2007 年 9 月作為一個 Google 20% 自由時間的一個實驗項目;到 2008 年 5 月發(fā)展為 Google 100% 支持的全時項目;再到 2009 年 11 月;Google 首次對外公開透露 Go 的存在;以及 2012 年 3 月,Go 1.0 官方正式版問世;Go 的演變和發(fā)展簡直始料未及,從開始到現(xiàn)在都是一如既往地突飛猛進,一發(fā)不可收拾。

如果說到 Java 曾經(jīng)的流行,我們會聯(lián)想到 SSH(Struts + Spring + Hibernate);如果提到 Python,也會聯(lián)想到 Django;如果提到 Ruby,會聯(lián)想到 Ruby on Rails;如果提到 JavaScript,會聯(lián)想到 NodeJS;如果提到 PHP,更是一堆長江后浪推前浪前浪死在沙灘上的 Web 開發(fā)框架。這些編程語言社區(qū)的繁榮昌盛無一例外都和 Web 開發(fā)息息相關(guān),且最終沉淀下來的都是各種五花八門各有千秋的眾多 Web 開發(fā)框架。可以說,我們當(dāng)前所面臨和 Web 開發(fā)的技術(shù)選型,從未有過如此的繁榮。繁榮的背后,襯托的是一個大江東流去不復(fù)還的 PC Web 時代。

我們再來看看 Go 的社區(qū),是多么地非同尋常和多樣豐盛。我們之前列舉過 Go 社區(qū)里邊比較流行熱門的開源項目:比如 Docker,是時下最流行和容器虛擬化相關(guān)的技術(shù)產(chǎn)物;比如 GroupCache ,是一個類似或代替 Memcached 的分布式內(nèi)存緩存系統(tǒng);比如 nsq,是一款處理海量并發(fā)的消息隊列系統(tǒng);再比如 etcd,是一套用于配置同步管理的分布式鍵值存儲系統(tǒng);以上這些都是和網(wǎng)絡(luò)和系統(tǒng)服務(wù)以及分布式相關(guān)。再比如 Goandroid,是一個開發(fā) Android NDK 應(yīng)用的工具,是和移動開發(fā)相關(guān)的…… 總之,有太多創(chuàng)新的開源產(chǎn)物,而 Web 開發(fā)框架都不是主要重點。Go 幾乎涵蓋了和編程領(lǐng)域相關(guān)的所有點和面,在 Go 1.0 正式版出現(xiàn)后的兩年時間里,基于 Go 可以枚舉全面覆蓋的開源項目超過了 1000 個??芍^是隨風(fēng)潛入夜,潤物細無聲。

從 Go 誕生的時代背景和團隊陣容以及開源社區(qū)的繁榮來講,Go 并不是新生不熟,而是后生可畏,且極有可能成為一統(tǒng)天下的集大成者。

我們再來看一些實際使用場景,比如 Web 開發(fā)。大多數(shù)編程語言之上的 Web 開發(fā)框架都是遵照 MVC 的處理流程去開發(fā) Web 應(yīng)用:Model 部分封裝數(shù)據(jù),Controller 部分處理業(yè)務(wù)邏輯,View 部分植入變量填充模板頁面。而大部分 Web 框架關(guān)于 MVC 的三部分都是在 Server-side 處理,比如對 View 部分的處理都是在 Server-side 通過程序動態(tài)對模版變量求值后再拼接組裝成 HTML 頁面輸出給瀏覽器去呈現(xiàn)。而 Go 開發(fā) Web 應(yīng)用,并不依賴任何 Web 開發(fā)框架,用內(nèi)置的標準庫就可以輕而易舉地實現(xiàn):比如使用 net/http 標準庫就可以數(shù)行代碼構(gòu)建一個完整的 Web 骨架應(yīng)用;再比如,通過關(guān)鍵字 struct 封裝一個數(shù)據(jù)結(jié)構(gòu)就可以表達原本 MVC 框架中需要用厚重的 ORM (Object-Relational Mapping) 才能表達的那部分。大道至簡,這可以說是 Go 的哲學(xué)。在 View 這一層,Go 也有相應(yīng)標準庫提供支持,但更推薦的做法,是當(dāng)下比較流行的 MVVM (Model-View-ViewModel):Server-side 只輸出 JSON,瀏覽器 DOM 作為 View 層,前端 JavaScript 充當(dāng) Contoller 部分;這樣,不僅減少了 Server-side 的資源消耗還有中間傳輸?shù)木W(wǎng)絡(luò)流量,而且前端可以更靈活和更豐富,后端也可以更輕盈和更高效,也更有利于項目的分工和協(xié)作。 而 Go 對 JSON 的生成和輸出,有數(shù)據(jù)測試表明異常高效(在 i7-2600K 處理器上針對所有編程語言包含開發(fā)框架總計約100個測試對比中,Go 的性能指標穩(wěn)居第一,詳見:http://t.cn/RvZHyKI)。以我個人喜好之見,后端用 Go 前端用 AngularJS 可以說是現(xiàn)今流行 MVVM 方式的 Web 開發(fā)之絕唱組合。所以,如有疑問 Go 適不適合用來做 Web 開發(fā),我想答案很肯定的:不但可以而且更簡單同時做得更出色甚至還可以做的更多。

我們再來看看當(dāng)下硬件突飛猛進的多核時代,軟件層面的編程語言都有哪些支持和作為。“人生苦短,我用 Python”,被喊了這么多年的標語,是有多少有追求和品味的程序員都熱衷于 Python。我想大家可以做個實際測驗:比如用 Python 寫一個死循環(huán)程序,然后運行起來,過一小段時間看看 CPU 占用率是多少。測試結(jié)果會是什么呢,CPU 會占用 100% 嗎?不好意思如果是那應(yīng)該是單核,且還得是沒有超線程支持的骨灰級 CPU 才行!在當(dāng)下普遍的雙核(甚至 4 核或 8 核) CPU 上,這個死循環(huán)跑滿最多只會占用不超過 50% 的 CPU 資源。好吧,你會說我開多個線程并行來跑這個死循環(huán)不就可以吃滿 CPU 了嗎?我想測試結(jié)論可以很明確的告訴你,多線程的方式并行跑這個死循環(huán)可是連 50% 的 CPU 都吃不到,不信你可以試試,呵呵。無需我解釋為什么,大家可以自行 Google 搜索看看 GIL (Global Interpreter Lock) 機理。也不是我特別拿 Python 舉例,PHP / Ruby / NodeJS 的程序員們也可以來做做同樣的測試,呵呵??傊?,一個簡單得不能再簡單的死循環(huán),程序上再怎么優(yōu)化,跑起來都吃不滿 CPU,你說我們都是這么有品味的程序員,到底都是在追求些什么呢?這些 PC Web 時代下的腳本語言或者字節(jié)碼解釋型的語言,幾乎都由于線程安全問題而在語言級的并發(fā)機制上裹足不前。盡管 Ruby 實現(xiàn)了很華麗的纖程,NodeJS 實現(xiàn)了很光線的非阻塞 IO,但始終逃離不了單線程簡單可依賴原則抑或多線程效率提升但伴隨著各種問題困擾從而不得不折中取舍的桎梏。所以,大部分時候,語言層面沒有根本性地解決并發(fā)問題,轉(zhuǎn)而使用傳統(tǒng)的多進程這一外援策略去解決并發(fā)需求以及變相地迎合這個多核時代。然而,硬件很快,軟件很慢,摩爾定律在硬件行業(yè)的應(yīng)驗帶給傳統(tǒng)軟件行業(yè)的紅利已經(jīng)走到了盡頭。

我們再來看看 Go 在當(dāng)下這個多核時代的作為。不得不說,Go 最大的特色就是在語言層面天然支持并發(fā),在 Go 程序里邊,你可以通過在一個函數(shù)調(diào)用前使用關(guān)鍵字 go 即可讓該函數(shù) func 運行成為一個獨立的 goroutine,goroutine 可以理解成一種比線程更加輕盈更省開銷的輕量級協(xié)程。Go 的并發(fā)模型就是通過系統(tǒng)的線程來多路派遣這些獨立函數(shù)的執(zhí)行,使得每個用關(guān)鍵字 go 執(zhí)行調(diào)用的函數(shù)可以運行成為一個單位協(xié)程。當(dāng)?個協(xié)程阻塞的時候,調(diào)度器就會自動把其他協(xié)程安排到另外的線程中去執(zhí)行,從而實現(xiàn)程序的無等待并行化運行。且調(diào)度的開銷非常小,單核 CPU 調(diào)度的規(guī)模不下于每秒百萬次,這使得我們能夠創(chuàng)建大量的 goroutines,從而可以很輕松地編寫并發(fā)程序達到我們想要的目的。

同時,Go 在語言層面還引入了 channel 這一內(nèi)置類型來實現(xiàn)并發(fā)執(zhí)行體 goroutines 之間的消息傳遞,通信靠 channels 來傳遞消息。Go 遵循 CSP(Communicating sequential processes) 并發(fā)模型,通過通信來共享內(nèi)存而不是用共享內(nèi)存的方式進行通信。Go 的并發(fā)里邊沒有共享內(nèi)存,更沒有內(nèi)存鎖,這一切都有利于進行更為安全和簡單的并行程序編寫。

終有一日,你會感慨:“人生苦短,說 Go 就 Go”!

時代在快速躍遷,尤其是現(xiàn)在言必及多核和并發(fā),我們所看到的那些 PC Web 時代下的腳本語言所堆砌的華麗不過是一些延續(xù)性追隨,而且這種延續(xù)性的步伐會越來越沉重,最終還是苦不堪言。唯有 Go,在語言層面對并發(fā)和多核乃是純天然的支持,原本就是一場應(yīng)時而生順時而為的土生土長,Go 所代表的是一種破壞性創(chuàng)新。而我們所經(jīng)歷的這個時代,正是處于一個時代被時代所顛覆的時代,在這樣一個轉(zhuǎn)折點,所有的延續(xù)性創(chuàng)新不過是杯水車薪,唯有破壞性創(chuàng)新,與時代共舞,才會產(chǎn)生革命性的顛覆。

我們還可以回顧下之前提到 Go 對 Android 移動端非侵入式的支持,幾乎就是一場悄無聲息的逆襲。

Go 很年輕,卻已健壯成年。Go 被設(shè)計得簡潔高效,Go 在語法層面有著清晰簡潔卻又高效的表達能力,是一個讓開發(fā)者編寫程序很開心同時又更有生產(chǎn)力的系統(tǒng)編程語言。Go 在語言層面有著良好的并發(fā)支持,使得用 Go 語言編寫多核和分布式網(wǎng)絡(luò)的應(yīng)用程序簡單容易許多。Go 內(nèi)置新穎靈活的類型系統(tǒng)還可以很方便地編寫和構(gòu)建模塊化程序。Go 是一門需要編譯源碼才能運行應(yīng)用的純靜態(tài)強類型語言,這點保證的了程序的安全性和執(zhí)行效率,且 Go 從程序源代碼編譯成機器碼非???。Go 的跨平臺支持,使得用 Go 語言編寫的程序可以在現(xiàn)今大多數(shù)操作系統(tǒng)上編譯運行。Go 還自帶垃圾回收的內(nèi)存管理機制,并且支持強大的運行時反射。Go 是動靜相宜的,在性能和安全性方面保留了靜態(tài)語言的優(yōu)點,在編程寫法上,卻有著動態(tài)語言的靈活與優(yōu)雅。

Go 是劃時代的,唯有 Go 能成為史詩之絕唱!Go 不是在顛覆,就是在逆襲!

本次 Go 語言的在線公開課中您會帶來哪些內(nèi)容?


Go語言編程。歡迎感興趣的朋友參與進來交流,謝謝大家!

7月30日的在線培訓(xùn)《Go語言編程》,七牛云存儲聯(lián)合創(chuàng)始人兼首席布道師徐立(@飛天急速徐倒立)將帶來 Go 的前世今生與 Go 語言編程的基礎(chǔ)教學(xué),以及七牛云存儲應(yīng)用 Go 的實踐分享。報名地址:http://huiyi.csdn.net/activity/product/goods_list?project_id=1202


免費訂閱“CSDN云計算”微信公眾號,實時掌握第一手云中消息!

CSDN作為國內(nèi)最專業(yè)的云計算服務(wù)平臺,提供云計算、大數(shù)據(jù)、虛擬化、數(shù)據(jù)中心、OpenStack、CloudStack、Hadoop、Spark、機器學(xué)習(xí)、智能算法等相關(guān)云計算觀點,云計算技術(shù),云計算平臺,云計算實踐,云計算產(chǎn)業(yè)資訊等服務(wù)。


生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 成人自拍网站 | 最新18videosex性欧美少 | 久爱免费观看在线精品 | 亚洲精品第一区二区三区 | 日韩欧美亚洲一区 | 亚洲国产成人久久综合区 | 最新日本免费一区二区三区中文 | 在线观看亚洲国产 | 天堂在线影院 | 毛片影视 | 日韩一区国产二区欧美三区 | 在线观看日韩 | 最近中文字幕无 | 欧美一级在线播放 | 欧美1314www伊人久久香网 | 亚洲乱码一二三四五六区 | 国产精品中文字幕在线 | 国产成人精品男人免费 | 欧美xxxx日本 | 空姐一级毛片 | 精品推荐国产麻豆剧传媒 | 精品国产一区二区三区久久影院 | 337p粉嫩日本大胆艺术 | 一级做a爱片特黄在线观看 一级做a爱片性色毛片武则天五则 | 国产精品乱码一区二区三区 | 国产精品福利社 | 在线啪| 婷婷在线观看视频 | 国产逼| 亚洲伊人久久大香线蕉啊 | 国产精品欧美视频另类专区 | 日本一级毛片视频无遮挡免费 | 青草青青产国视频在线 | 国产一级精品视频 | 成人三级精品视频在线观看 | 午夜羞羞影院 | 宇都宫紫苑乳在线观看 | 就操成人网| 福利精品 | 中文字幕一区二区三区精品 | 国内老司机精品视频在线播出 |