go设置后端启动_为什么 Rubyists 应该考虑学习 Go
如今,越來越少的 Web 開發人員開始專注于 Ruby 之類的單一語言。我們針對不同的工作使用不同的工具。在本文中,Ayooluwa Isaiah 認為 Go 是 Ruby 的完美補充。兩門語言都會的開發人員可以很好地應對幾乎所有后端挑戰。
Ruby 和 Rails 是出色的工具,可讓你快速創建復雜的 Web 應用程序。好吧,一些復雜的 Web 應用程序。盡管它們在傳統的,整體的,服務器呈現的應用程序方面表現出色,但在交付實時或分布式服務方面卻表現不佳。
這就是為什么 Rubyists 會去學習 Go 之類的語言的原因。Go 專為編寫可處理大量連接的輕量服務而設計。它的優勢與 Ruby 的劣勢驚人地吻合。如果你會這兩門語言,那么你基本上是勢不可擋的。
本文是關于從 Rubyist 的角度學習 Go 的系列文章的第一篇。它將涵蓋與其他任何教程中相同的語言基本原理。但是,將花費時間在 Ruby 中可能的陌生領域。
##Go 簡介
Go 是由 Robert Griesemer,Rob Pike 和 Ken Thompson 在 Google 設計的一種編譯的,靜態類型的編程語言,它于 Ruby 首次發布十多年后的 2007 年開始開發,并于 2009 年首次發布。
開發新的編程語言的想法源自與 Google 使用其他語言有關的挫敗感。目標是創建一種語言,以解決現代編程難題,同時消除所有無關功能,這些功能使維護諸如 C++ 之類的代碼變得困難。
Go 極簡。它的語法很簡單,只有 25 個關鍵字。它的規范相對容易閱讀。這意味著你可以快速啟動并運行。讓我們一起去看看 “hello world” 是什么樣的:
//?Hello?World!?program?in?GoGo 提供類型安全性和快速的開發周期
作為 Ruby 開發人員,編寫完代碼,然后立即運行它。我們中的許多人從未發現有什么不同,因此我們沒有意識到快速開發周期是什么奢侈品。
必須編譯的像 C++ 之類的語言。在較大的代碼庫上,這可能需要幾分鐘甚至幾小時。您能想象這么長時間運行剛剛編寫的代碼會多么令人沮喪嗎?
當然,之所以要花費這么長時間,是因為 C++ 編譯器在前期做了很多工作,而 Ruby 沒有。在 C++ 中,如果您拼寫錯誤的方法名稱,編譯器會告訴您。這是因為 C++ 是“類型安全的”。在 Ruby 中,直到運行代碼并獲取常見的 NoMethodError,您才知道自己犯了一個錯誤。
NoMethodError exceptionGo 為你提供了兩全其美的方案:快速的開發周期和類型安全。
Go 具有動態語言一樣的快速開發體驗,這是因為它具有閃電般的快速編譯時間,同時還提供了這些動態語言所缺乏的類型安全性。Go 程序也非常快。它們并沒有完全達到 Rus t或 C 的水平,但比其他語言(如 Ruby 或 Python)要快得多。
Go 是一種多用途語言,可以在軟件開發的許多不同領域中使用。它具有內置的并發功能,特別適合網絡應用程序和分布式云服務,使應用程序可以有效利用運行它的硬件的可用資源。
Go 很簡單
從 Go 誕生之日起,避免引入太多功能成為 Go 的特定設計目標。許多其他語言都希望繼續添加更多功能,其理由通常是為了表達力。Go 的設計師通過選擇只包含覆蓋解決方案空間并與語言的其他功能可預測地交互的功能來拒絕這種哲學。
Go 語言的原始設計師之一肯·湯普森(Ken Thompson)很好地總結了這種不同尋常的立場:
當我們三個人(Thompson, Rob Pike 和 Robert Griesemer)開始開發 Go 時,純粹是研究。我們三個在一起,決定這么做,因為討厭 C ++。[笑聲] ... [回到Go],我們開始的想法是,我們三個人都必須與語言的每個功能進行確認,因此,任何原因,都不會在語言中添加多余的垃圾。
多年來,Go 團隊一直恪守這一理念。這導致了一種語言的設計,即使在某些情況下(例如在處理錯誤時)過于冗長,其語言也為清晰起見而設計。
//?Error?handling?in?GoGo 程序通常具有很高的可讀性和易于維護性,因為除了業務邏輯之外,您不需要了解太多的事情就可以在任何代碼庫上工作,即使是不熟悉的代碼庫,也不會遇到每個開發人員都使用的問題。語言的不同子集,這是用其他語言編寫的大型軟件項目中經常遇到的情況。
Go 很“固執”
Go 對如何編寫和格式化代碼有強烈的規定。因此,所有 Go 代碼看起來都差不多。這種質量有助于減輕熟悉陌生代碼庫時的認知負擔,并消除有關瑣碎細節(例如空格和大括號位置)的不必要爭論。
該語言內置了 gofmt 和 golint 之類的工具,可為現有的所有 Go 代碼提供格式化和編碼,并且它們遵循的規則無法以任何方式進行配置。例如,gofmt 使用制表符縮進 Go 程序。您是否喜歡空格而不是制表符?好吧,你不能改變它。至少通過 gofmt 做不到。
Go 不允許你導入包或在不使用包的情況下聲明變量。如果嘗試這樣做,代碼將無法編譯。這種行為背后的想法是為了短期的不方便而換來長期的編譯速度和程序的清晰度。
Go 語言不存在訪問修飾符關鍵字。沒有 public,private 或 protected 關鍵字。Go 支持兩種用于變量,函數和其他類型(即已導出和未導出)的訪問修飾符,它們可以在包級別使用。
如果要創建未導出的標識符(在程序包外部無法訪問的標識符),請以小寫字母開頭。您可能會猜到,導出的標識符以大寫字母開頭。在閱讀代碼時會立即理解這一點,并使代碼更加簡潔。
var?Foo?Go 的測試包附帶一個要求,即任何測試文件都必須帶有 _test.go 后綴。名為 program.go 的文件有測試文件時,應該命名為 program_test.go。這樣一來,Go 可以在編譯代碼時忽略測試文件,因為程序運行不需要它們。當您要測試代碼時,提供了開箱即用的 go test 命令,該命令執行這些文件并運行測試。
Go 的兩極分化
盡管 Go 的擁護者人數眾多,但如今批評這種語言已成為一種時尚。甚至還有一個 GitHub 代碼庫,專用于列出抱怨 Go 的文章。他們中的大多數人都專注于 Go 所沒有的功能或語言中的某些問題。
與其他所有語言一樣,Go 也有相當多的包袱和缺點。隨著語言的發展,隨著時間的流逝,這些事情可能會有所改善。Go的主要優勢在于其基本的極簡主義哲學。但是,它并不完美,某些方面可以改進,包括缺少泛型。
Go 永遠不會使每個人都高興,但是當用于它設計的問題領域時,它絕對是贏家!
Go 非常適合 Web 開發
Go 具有令人驚嘆的標準庫,可讓您快速開發可擴展且安全的 Web 應用程序,而無需使用框架。它帶有一個功能齊全的 Web 服務器(net/http),并包括模板,路由以及大多數您需要的 Rails 之類的東西。對于許多類型的項目,堅持使用標準庫是完全合理的。
在標準庫不符合您的期望的情況下,存在一些補充標準庫的第三方軟件包,例如 Gorilla Toolkit。另外,如果您確實需要一個包含所有內容的框架,您將很高興得知存在多個選擇。如果您正在尋找具有與 Rails 類似特征的東西,可以看看Buffalo。
Go 程序的部署過程也輕而易舉!您不需要在服務器上安裝任何東西。只需為您的目標操作系統編譯項目,您將獲得一個可移植的二進制文件,可以上傳到服務器并執行該二進制文件。
例如,要從 Linux 計算機為 Windows 環境構建,可以使用以下命令:
GOOS=windows?GOARCH=386?go?build?-o?hello.exe?hello.go生成的 hello.exe 文件將可在具有 x86 CPU 的任何 Windows 計算機上運行,而無需任何進一步的設置。這對容器也很好。只需將一個二進制文件放入一個輕量級的 Docker 容器中,設置一些環境變量,然后運行該應用程序即可!
如果在部署后出現問題并且需要回滾,則可以輕松地還原到先前的二進制文件。由于整個程序都被編譯為單個二進制文件,因此您無需擔心意外升級了依賴項。
與 Rails 相比,Go 程序通常在 CPU 和內存資源上使用的資源要少得多,這有助于顯著降低服務器成本。例如,Iron 在從 Rails 切換到 Go 時,在啟動時就可以將其內存使用量從 50MB 減少到數百 KB。
由于其內置的并發功能,Go 非常適合需要同時處理數千個請求的大型軟件項目。Go 在執行其他任務時會使用 goroutines 并發執行一些代碼,而稱為“channel”的輕量級通信機制可幫助您避免并發數據修改。
Go 入門
如果你準備學習 Go,則可以按照此處提供的說明將其下載并安裝到計算機上。要學習該語言的基本語法和功能,請使用 A Tour of Go。gobyexample 是另一個值得學習的好資源。
想要利用您所學的知識來構建程序嗎?試試 https://gophercises.com/。它提供免費的教程,通過構建多個項目來涵蓋語言的各個方面,每個項目旨在教給您一些不同的東西。
如果您想讀一本書,那么《Go編程語言》和《Go語言實戰 Go In Action》是極好的讀物。
總結
使用 Go 還是 Ruby 將取決于您的項目要求。兩者都是很棒的,它們絕對可以共存于您的語言工具箱中。
作為 Ruby 開發人員學習 Go,軟件開發中的其他范例會讓你眼前一亮。有時會感到陌生,但最終會給您帶來不同的看法并幫助您成為更好的開發人員。
我希望本文有助于激起您對 Go 的好奇心,并促使您考慮如何在當前和將來的軟件項目中使用它。
原文鏈接:https://www.honeybadger.io/blog/rubyist-learn-go/
作者:Ayooluwa Isaiah
翻譯:Go語言中文網 polaris
推薦閱讀
- Go 和 Rust 的優缺點;預測 Go 1.16-1.19 會支持泛型 
喜歡本文的朋友,歡迎關注“Go語言中文網”:
Go語言中文網啟用微信學習交流群,歡迎加微信:274768166,投稿亦歡迎
總結
以上是生活随笔為你收集整理的go设置后端启动_为什么 Rubyists 应该考虑学习 Go的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: jsp人事管理系统_Jsp+Ssm+My
- 下一篇: java创建一个未知长度的数组_Java
