欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

從Node.js 轉(zhuǎn)到 Go平臺

 更新時間:2015年03月24日 15:51:23   投稿:hebedich  
回顧過去的一年,我們在技術(shù)棧上的最大改變就是從 Node.js 切換到 Go 。我們的聯(lián)合創(chuàng)始人,Steve Kaliski, 在 Poptip 把 Node.js 切換成了 Go,可惜他沒有學(xué)習(xí)到當(dāng)時的教訓(xùn)。

在用 Node.js 建立了 Bowery 的第一個迭代版本后,我們在2014年2月切換到了 Go,我們的開發(fā)和部署速度也因此得到提升。

從那以后,我們整個團隊都變成了專職的地鼠(譯者注:Go 的吉祥物)。Go 清晰明確的標(biāo)準(zhǔn)和更簡便的工作流程讓我們用 Go 用得很舒服。下面是我們熱愛用 Go 進行工作的原因,你可以從中瞄一眼我們的地鼠洞。

容易編寫跨平臺代碼

我們切換成 Go 的其中一個最大原因就是它是那么容易去為不同系統(tǒng)編譯代碼。

在 Bowery, 我們在建立一個能幫忙你和你的團隊管理你們的開發(fā)環(huán)境的app,我們必須要高效地支持所有操作系統(tǒng)——Linux,Windows 還有 OSX。在Go中,你可以為不同的操作系統(tǒng)定義不同的文件,從而實現(xiàn)依賴于操作系統(tǒng)的功能。一個絕佳的例子就是我們的同伴 Larz 在構(gòu)建一個從命令行讀取用戶輸入的包 Prompt 的事。Larz 希望去創(chuàng)建一個 Go 包用來實現(xiàn)跨平臺的行編輯提示。這在 Go 中是如此簡單:為每個操作系統(tǒng)創(chuàng)建不同的文件,Go 編譯器會根據(jù)操作系統(tǒng)來選擇應(yīng)使用的文件來生成最終內(nèi)容。

為其他的系統(tǒng)編譯代碼同樣很簡單,你要做的僅僅是設(shè)置一個環(huán)境變量,然后你就有了一個你在 Linux 系統(tǒng)上編譯的 Windows 二進制文件。

更快的部署

Go 是一款編譯型語言并且可以更輕松地在多個平臺上分發(fā)應(yīng)用。 對我們而言,部署和測試是很重要的,同時也是我們最終用戶的一個資產(chǎn)。通過 Go,構(gòu)建服務(wù)然后運行測試會很容易,因為遷移到生產(chǎn)環(huán)境的服務(wù)器時就準(zhǔn)備好了。 Go 不需要任何的系統(tǒng)依賴,讓它的發(fā)布真的很簡單。 當(dāng)要發(fā)布命令行工具或者其它應(yīng)用時,我們的用戶不需要擔(dān)心要安裝Java,RVM或者NPM才能運行。 我們喜歡這篇Jeremy Saenz 的文章,他討論了為什么他把他所有的命令行工具遷移到Go(CLI tools to Go)。

并發(fā)基元
當(dāng)切換到Go時我們意識到Node.js的事件循環(huán)并不是一切。Node.js 沒有提供太多的并發(fā)基元。唯一能同時運行的是I/O程序和定時器等。你無法通過這些程序通訊,所以用Node.js建立一個敏捷的系統(tǒng)是一個挑戰(zhàn)。使用Go,你可以在運行任意并程序的同時,提供一個頻道去給程序發(fā)送信號讓它做一些事情,或者給它們發(fā)送一些值來共享數(shù)據(jù)。Go還提供了像 mutexes, wait groups等低級別的并發(fā)基元 。 有的你可能在NPM上找到,但我們發(fā)現(xiàn)在處理并發(fā)和并行時頻道是決定性因素。

集成測試框架

用Node.js的時候,我們已經(jīng)有了我們的測試框架選擇,但一些框架對于前端來說更好用,比如Jasmine, 其它的框架則對后端來說更好用,比如Mocha。也有其它的選擇像JSUnit和PhantomJS,如果你看過StackOverflow的這篇文章,那里也有人推薦許多的框架。在一些世界里,選擇是一件好事,但使用Go的時候,我們喜歡測試框架的規(guī)范化。在Go里,所有的測試包都是內(nèi)置的。如果你需要寫一個新的測試套件,你必須做就是把(文件名)_test.go文件加到你要測試的軟件的同一個包里,它將會在你每次執(zhí)行g(shù)o test的時候運行。
你可以在writing tests with Go學(xué)到更多關(guān)于Go 測試的知識。 需要測試HTTP services? Go同樣提供了httptest包

標(biāo)準(zhǔn)庫

我們喜歡僅用Go的標(biāo)準(zhǔn)庫就能寫大多數(shù)的軟件。用Node.js時,我們幾乎都是不得不引入一個外部的庫, 這樣做既增加了部署的時間,也增加了來自第三方軟件的潛在隱患。只用標(biāo)準(zhǔn)庫能讓我們寫的代碼更快更安全。

開發(fā)者用的工作流工具更強大

Node.js除了NPM的包和腳本控件,沒有真正的標(biāo)準(zhǔn)化的工作流。除此之外, 因為這些工具是社區(qū)創(chuàng)造的,雖然很好用但是實在太多了,以至于最終的結(jié)果就是事情被每個人以不同的方式完成了。在Go里工作流標(biāo)準(zhǔn)化的一個很好的例子就是工作區(qū)的布局。你要放棄很多開發(fā)自由因為你必須遵守工作區(qū)的布局,不過它提供了大量的結(jié)構(gòu):你可以保留你的Go源碼和依賴在同一個位置。在你的工作區(qū)你有3個根目錄: src 放源碼包,pkg放編譯過的包,bin放可執(zhí)行的程序。讓你的源碼和依賴放在一個單獨的工作區(qū)是一個最佳實踐, 讓它在每個人的機器上都是這個標(biāo)準(zhǔn)。在團隊合作里這些可預(yù)測性是讓人滿意的。我們可以去任何人的機子上提供幫助,并且知道我們的代碼將會出現(xiàn)在$GOPATH/src/github.com/Bowery這個路徑,而不是其它像$HOME/some/path/to/Bowery這樣的路徑。類似的,gofmt用同樣的方式格式化每個人的代碼。對于一些膚淺的問題,像組織代碼和代碼風(fēng)格差異在Go里根本不需要擔(dān)心,這是一個大大的解放。你可以專注修復(fù)你的問題,其它的事都被考慮到了。

還有一大堆其它的原因去喜歡Go,我們看到越來越多的公司采用Go讓內(nèi)部應(yīng)用變得更強大并且是可分布式的。但總的來說,Go團隊發(fā)現(xiàn)如果你創(chuàng)造標(biāo)準(zhǔn)并弄成范例讓別人同意的話,開發(fā)者們會更高產(chǎn)。 比如, MongoDB 的應(yīng)用管理團隊喜歡用Go的"明智的、 統(tǒng)一的開發(fā)經(jīng)驗"。 在 Soundcloud,他們喜歡用Go嚴(yán)格的格式化代碼規(guī)則和“實現(xiàn)的方式只有一種”的哲學(xué)。這意味著你會在代碼審查和爭論代碼風(fēng)格和格式上花很少的時間,而可以用更多的時間去解決你問題的根源。

如果你剛開始使用Go并且想了解更多,這里有一些資源可以看看。

閱讀Golang 官方博客的更新和核心團隊的公告
閱讀核心團隊提供在官網(wǎng)的學(xué)習(xí)文檔
我們喜歡Ardan工作室的Bill Kennedy寫在博客 Going Go Programming 上的竅門和指南
Go by Example 有一堆用Go寫的不同任務(wù)的例子
GopherAcademy 有很多關(guān)于Go的最佳實踐的文章
Brian McCallister 有一篇很好的文章是 Go 工作區(qū)和總體開發(fā)環(huán)境
更多關(guān)于Go的代碼組織,閱讀Jared Carroll發(fā)布在 Pivotal Labs blog 的文章
如果要開始你的第一個Go項目,設(shè)置你的新環(huán)境并在Bowery分享給你的團隊吧。

請您花一點時間將文章分享給您的朋友或者留下評論。我們將會由衷感謝您的支持!

相關(guān)文章

  • Go語言集成開發(fā)環(huán)境IDE詳細(xì)安裝教程

    Go語言集成開發(fā)環(huán)境IDE詳細(xì)安裝教程

    VSCode是免費開源的現(xiàn)代化輕量級代碼編輯器,支持幾乎所有主流的開發(fā)語言,內(nèi)置命令行工具和 Git 版本控制系統(tǒng),支持插件擴展,這篇文章主要介紹了Go語言集成開發(fā)環(huán)境IDE詳細(xì)安裝教程,需要的朋友可以參考下
    2021-11-11
  • Go字典使用詳解

    Go字典使用詳解

    今天和大家一起學(xué)習(xí)Go語言的字典。Go語言的字典又稱為map,一種使用廣泛的數(shù)據(jù)結(jié)構(gòu)。它是擁有key/value對元素的「無序集合」,而且在集合中key必須是唯一的
    2022-11-11
  • Go 簡單實現(xiàn)多租戶數(shù)據(jù)庫隔離

    Go 簡單實現(xiàn)多租戶數(shù)據(jù)庫隔離

    本文主要介紹了Go 簡單實現(xiàn)多租戶數(shù)據(jù)庫隔離,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 詳解Opentelemetry Collector采集器

    詳解Opentelemetry Collector采集器

    這篇文章主要為大家介紹了Opentelemetry Collector神秘的采集器詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • 深入了解GoLang中的工廠設(shè)計模式

    深入了解GoLang中的工廠設(shè)計模式

    這篇文章主要介紹了深入了解GoLang中的工廠設(shè)計模式,工廠模式是一種常用的設(shè)計模式,它屬于創(chuàng)建型模式,它的主要目的是封裝對象的創(chuàng)建過程,將對象的創(chuàng)建過程與對象的使用過程分離,從而提高代碼的可維護性和可擴展性,需要詳細(xì)了解可以參考下文
    2023-05-05
  • Go語言中strings和strconv包示例代碼詳解

    Go語言中strings和strconv包示例代碼詳解

    這篇文章主要介紹了Go語言中strings和strconv包示例代碼詳解 ,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-11-11
  • Go語言中日志統(tǒng)一處理詳解

    Go語言中日志統(tǒng)一處理詳解

    在現(xiàn)代軟件開發(fā)中,日志記錄是一項至關(guān)重要的任務(wù),它不僅幫助開發(fā)人員診斷問題,還有助于監(jiān)控和維護應(yīng)用程序,本文主要來和大家聊聊日志的統(tǒng)一處理,感興趣的小伙伴可以了解下
    2024-01-01
  • GO語言臨界資源安全問題的深入理解

    GO語言臨界資源安全問題的深入理解

    臨界資源安全問題也就是以往我們常聽到的線程安全問題,本文詳細(xì)的介紹了GO語言臨界資源安全問題的深入理解,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Go語言中日期包(time包)的具體使用

    Go語言中日期包(time包)的具體使用

    本文主要介紹了Go語言中日期包的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Golang中的select語句及其應(yīng)用實例

    Golang中的select語句及其應(yīng)用實例

    本文將介紹Golang中的select語句的使用方法和作用,并通過代碼示例展示其在并發(fā)編程中的實際應(yīng)用,此外,還提供了一些與select相關(guān)的面試題,幫助讀者更好地理解和應(yīng)用select語句
    2023-12-12

最新評論