国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Golang > 正文

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

2020-04-01 19:14:50
字體:
供稿:網(wǎng)友
回顧過去的一年,我們在技術(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 清晰明確的標準和更簡便的工作流程讓我們用 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ù)器時就準備好了。 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包

標準庫

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

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

Node.js除了NPM的包和腳本控件,沒有真正的標準化的工作流。除此之外, 因為這些工具是社區(qū)創(chuàng)造的,雖然很好用但是實在太多了,以至于最終的結(jié)果就是事情被每個人以不同的方式完成了。在Go里工作流標準化的一個很好的例子就是工作區(qū)的布局。你要放棄很多開發(fā)自由因為你必須遵守工作區(qū)的布局,不過它提供了大量的結(jié)構(gòu):你可以保留你的Go源碼和依賴在同一個位置。在你的工作區(qū)你有3個根目錄: src 放源碼包,pkg放編譯過的包,bin放可執(zhí)行的程序。讓你的源碼和依賴放在一個單獨的工作區(qū)是一個最佳實踐, 讓它在每個人的機器上都是這個標準。在團隊合作里這些可預(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)造標準并弄成范例讓別人同意的話,開發(fā)者們會更高產(chǎn)。 比如, MongoDB 的應(yīng)用管理團隊喜歡用Go的"明智的、 統(tǒng)一的開發(fā)經(jīng)驗"。 在 Soundcloud,他們喜歡用Go嚴格的格式化代碼規(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分享給你的團隊吧。

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


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 霞浦县| 大足县| 莆田市| 潢川县| 郸城县| 鱼台县| 临洮县| 武清区| 阜康市| 金溪县| 孟连| 铁岭县| 亳州市| 东乡族自治县| 全南县| 加查县| 威信县| 收藏| 大埔县| 潞西市| 新野县| 赤峰市| 高台县| 武山县| 祁阳县| 文昌市| 桐庐县| 连南| 峨眉山市| 呼和浩特市| 深圳市| 改则县| 札达县| 桐乡市| 永定县| 江门市| 阿瓦提县| 筠连县| 桂平市| 东丽区| 肃宁县|