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

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

本文選自:外刊IT評論網

我們SoundCloud是一個使用多種程式設計語言的公司,雖然我們的技術架構最外層一直使用的是Ruby on Rails,但是在後端,各種各樣的程式設計語言都有涉及。在這裡我想多講一下為什麼要使用和如何使用Go這樣一種開源的、剛剛發布其1.0版本的程式設計語言的。

                

在我們的公司裡,所有的技術人員都是全能選手,而不是專才,這是根植於公司基因文化裡的特徵。我們希望每個人都能對公司的基礎架構中每一部分都至少有相當的瞭解。更進一步,我們鼓勵技術人員在個Team Dev間調換,甚至組成新的團隊,使成員跟各團隊的衝突和摩擦盡量減少。在這樣一種代碼共產共有的環境中,非常需要一種表達性強,效率高的語言來降低實施的困難,Go語言證明了它是一種非常適合的語言。

GoogleGolanguage

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

Go語言嚴格的結構原則和它的“一種事情有且只有一種方法完成”的思想意味著我們無需在風格問題上糾纏不休。在針對Go語言程式的代碼審查上,審查會變得更針對問題,而不是針對語言上的錯綜複雜,這是每個人都願意看到的。

更值得一提的是,一旦一個程式員對Effective Go有了一個基本掌握,你會發現他們的關注點能非常自然的從“應用目前應該怎樣運行”過度到“應用在理想狀況下應該如何的運行”。是否是背景響應緩慢致使整個請求失敗?是否應該只重試一次,不成功就只提供部分的結果?瀏覽器表現異常,我們是否要設定一個250毫秒的逾時限制?系統中任何一個外層的行為情境都能用一種直接的、理想化的實現來表示,不需要類庫或架構的支援。去掉抽象層降低了複雜性;直白陳述式、簡單的代碼是更好的代碼。

Go語言還有其它一些非常好的特徵,讓我們受益不少。靜態類型和快速編譯使我們能夠在開發過程中做幾乎即時的靜態檢查和單元測試。這也意味我們開發的基於Go語言的系統中的編譯,測試和發布幾乎是一起完成的。

事實上,快速的編譯,快速的測試,快速的相互審查和快速的部署意味著你的一些想法能在一個小時內從白板上的設計變成產品中可啟動並執行程式。例如,Next軟體中的搜尋準系統是由Elastic Search驅動的,但是它接受SoundCloud的管理和交換幾乎全部是Go服務來完成。在驗證過程中,我們認識的,我們需要一種能在某個特殊環境中把索引標誌為唯讀狀態的方法,需要索引系統能知道並順從這種狀態。在代碼中加入抽象層,開發一個新的進入點正確的檢測這種狀態,修改跟索引相關的行為,為它們寫測試代碼,這一切只用了半個下午的時間。晚上時,這些修改已經部署並運行了好幾個小時了。這樣的速度,尤其是對一種靜態類型的,本地編譯的語言,簡直沒得說了。

我說到了我們的編譯和部署系統。它叫Bazooka,它被設計成一個平台,用來管理內部服務的部署。(我們很快就會把它開源;關注我們,不要走開!)我們曾通過一個情況複雜的網路環境升級12-Factor應用,你可以把它當成一個巨大的、複雜的狀態機器,隨時都有可能造成資料汙染和相互競爭的狀態。對於這種工作,Go語言是最自然的選擇。Go語言很獨特,它有天生的並行安全特徵。Bazooka系統的開發人員能夠分析出問題的複雜性而不需要使用那些複雜的協助工具輔助。Bazooka利用Doozer來協調它的共用狀態,Doozer是世界上唯一一個Paxos開源實現軟體(就我們所知)——它也是用Go語言開發的。

總之,我們在SoundCloud公司維護著都是用Go語言寫成的十幾種服務和十幾種知識庫。當有新的後台項目時,我慢慢的都會選擇使用Go語言來完成。

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

[本文英文原文連結:Go at SoundCloud ]

圖靈的兩本相關圖書:

       

 Go語言編程                Go語言·雲動力


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.