自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

為什么我們要使用Go語言以及如何使用它的

開發(fā) 開發(fā)工具
我們SoundCloud是一個(gè)使用多種編程語言的公司,雖然我們的技術(shù)架構(gòu)最外層一直使用的是Ruby on Rails,但是在后端,各種各樣的編程語言都有涉及。在這里我想多講一下為什么要使用和如何使用Go這樣一種開源的、剛剛發(fā)布其1.0版本的編程語言的。

我們SoundCloud是一個(gè)使用多種編程語言的公司,雖然我們的技術(shù)架構(gòu)最外層一直使用的是Ruby on Rails,但是在后端,各種各樣的編程語言都有涉及。在這里我想多講一下為什么要使用和如何使用Go這樣一種開源的、剛剛發(fā)布其1.0版本的編程語言的。

在我們的公司里,所有的技術(shù)人員都是全能選手,而不是專才,這是根植于公司基因文化里的特征。我們希望每個(gè)人都能對公司的基礎(chǔ)架構(gòu)中每一部分都至少有相當(dāng)?shù)牧私?。更進(jìn)一步,我們鼓勵技術(shù)人員在個(gè)開發(fā)團(tuán)隊(duì)間調(diào)換,甚至組成新的團(tuán)隊(duì),使成員跟各團(tuán)隊(duì)的沖突和摩擦盡量減少。在這樣一種代碼共產(chǎn)共有的環(huán)境中,非常需要一種表達(dá)性強(qiáng),效率高的語言來降低實(shí)施的困難,Go語言證明了它是一種非常適合的語言。

[[90417]]

我們已經(jīng)有好幾個(gè)程序員都把Go語言描述為是一種所見即所得(WYSIWYG)的編程語言。這是說,代碼要做的事和它在字面上表達(dá)的意思是完全一致的。這種特征對于使軟件無歧義和可維護(hù)有著巨大的幫助。Go語言明確的拒絕“helper”習(xí)慣用法以及諸如統(tǒng)一訪問原則(Uniform Access Principle)、操作符重載、缺省參數(shù)、甚至異常等特征,基本上,這些特征相較于能產(chǎn)生更豐富的表達(dá),它們的歧義性會帶來更大的問題。不否認(rèn),這樣的策略會帶來更多的鍵盤敲擊——尤其是,正如大多數(shù)參與Go語言項(xiàng)目的新手程序員痛斥的,在異常處理時(shí)最麻煩——但是,換來的報(bào)答是,還是這些新手程序員,他們能輕易的、迅速的將應(yīng)用在腦海里形成一個(gè)完整的模型。我可以很有信心的告訴大家,從項(xiàng)目開始到提交代碼,Go是我們使用過的效率***的語言。

Go語言嚴(yán)格的結(jié)構(gòu)原則和它的“一種事情有且只有一種方法完成”的思想意味著我們無需在風(fēng)格問題上糾纏不休。在針對Go語言程序的代碼審查上,審查會變得更針對問題,而不是針對語言上的錯綜復(fù)雜,這是每個(gè)人都愿意看到的。

更值得一提的是,一旦一個(gè)程序員對Effective Go有了一個(gè)基本掌握,你會發(fā)現(xiàn)他們的關(guān)注點(diǎn)能非常自然的從“應(yīng)用目前應(yīng)該怎樣運(yùn)行”過度到“應(yīng)用在理想狀況下應(yīng)該如何的運(yùn)行”。是否是后臺的響應(yīng)緩慢致使整個(gè)請求失?。渴欠駪?yīng)該只重試一次,不成功就只提供部分的結(jié)果?瀏覽器表現(xiàn)異常,我們是否要設(shè)置一個(gè)250毫秒的超時(shí)限制?系統(tǒng)中任何一個(gè)外層的行為場景都能用一種直接的、理想化的實(shí)現(xiàn)來表示,不需要類庫或框架的支持。去掉抽象層降低了復(fù)雜性;直白陳述式、簡單的代碼是更好的代碼。

Go語言還有其它一些非常好的特征,讓我們受益不少。靜態(tài)類型和快速編譯使我們能夠在開發(fā)過程中做幾乎實(shí)時(shí)的靜態(tài)檢查和單元測試。這也意味我們開發(fā)的基于Go語言的系統(tǒng)中的編譯,測試和發(fā)布幾乎是一起完成的。

事實(shí)上,快速的編譯,快速的測試,快速的相互審查和快速的部署意味著你的一些想法能在一個(gè)小時(shí)內(nèi)從白板上的設(shè)計(jì)變成產(chǎn)品中可運(yùn)行的程序。例如,Next軟件中的搜索基本功能是由Elastic Search驅(qū)動的,但是它接受SoundCloud的管理和交換幾乎全部是Go服務(wù)來完成。在驗(yàn)證過程中,我們認(rèn)識的,我們需要一種能在某個(gè)特殊環(huán)境中把索引標(biāo)志為只讀狀態(tài)的方法,需要索引系統(tǒng)能知道并順從這種狀態(tài)。在代碼中加入抽象層,開發(fā)一個(gè)新的入口點(diǎn)正確的檢測這種狀態(tài),修改跟索引相關(guān)的行為,為它們寫測試代碼,這一切只用了半個(gè)下午的時(shí)間。晚上時(shí),這些修改已經(jīng)部署并運(yùn)行了好幾個(gè)小時(shí)了。這樣的速度,尤其是對一種靜態(tài)類型的,本地編譯的語言,簡直沒得說了。

我說到了我們的編譯和部署系統(tǒng)。它叫Bazooka,它被設(shè)計(jì)成一個(gè)平臺,用來管理內(nèi)部服務(wù)的部署。(我們很快就會把它開源;關(guān)注我們,不要走開!)我們曾通過一個(gè)情況復(fù)雜的網(wǎng)絡(luò)環(huán)境升級12-Factor應(yīng)用,你可以把它當(dāng)成一個(gè)巨大的、復(fù)雜的狀態(tài)機(jī),隨時(shí)都有可能造成數(shù)據(jù)污染和相互競爭的狀態(tài)。對于這種工作,Go語言是最自然的選擇。Go語言很獨(dú)特,它有天生的并行安全特征。Bazooka系統(tǒng)的開發(fā)人員能夠分析出問題的復(fù)雜性而不需要使用那些復(fù)雜的輔助工具。Bazooka利用Doozer來協(xié)調(diào)它的共享狀態(tài),Doozer是世界上唯一一個(gè)Paxos開源實(shí)現(xiàn)軟件(就我們所知)——它也是用Go語言開發(fā)的。

總之,我們在SoundCloud公司維護(hù)著都是用Go語言寫成的十幾種服務(wù)和十幾種知識庫。當(dāng)有新的后臺項(xiàng)目時(shí),我慢慢的都會選擇使用Go語言來完成。

你對使用Go語言解決真正問題和開發(fā)真正產(chǎn)品感興趣嗎?我們很樂意聽到你的聲音!

英文原文:Go at SoundCloud

原文鏈接:http://www.aqee.net/go-at-soundcloud/

責(zé)任編輯:林師授 來源: 外刊IT評論
相關(guān)推薦

2023-03-06 08:01:25

structGo語言

2023-09-21 09:00:00

Merge Que開發(fā)工具Mergify

2022-04-26 16:56:20

行為數(shù)據(jù)數(shù)據(jù)

2013-09-27 11:33:57

交換機(jī)技術(shù)Vlan技術(shù)

2021-02-18 09:23:47

數(shù)據(jù)庫分區(qū)數(shù)據(jù)庫倉庫

2014-01-03 10:59:34

2011-03-08 12:59:38

proftpd

2014-11-21 10:50:26

JavaString

2018-11-02 14:00:20

2017-07-03 13:33:42

AndroidItemDecorat

2017-12-29 09:32:55

無服務(wù)器架構(gòu)排查

2024-01-02 10:38:22

Go語言數(shù)組

2021-12-27 07:59:11

Web3區(qū)塊鏈協(xié)議

2016-09-27 21:25:08

Go語言Ken Thompso

2024-02-19 15:42:29

2011-04-14 09:30:15

集合框架

2010-05-11 10:29:06

Unix awk

2014-05-19 15:52:57

Apache StraApache

2021-04-26 09:33:46

Go Iota語言

2009-06-11 17:03:22

Spring起源Spring優(yōu)點(diǎn)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號