首頁 > 後端開發 > Golang > 主體

go語言能做web嗎

青灯夜游
發布: 2023-02-09 11:55:08
原創
5396 人瀏覽過

go語言能做web。 Go可以透過在多個Go Web應用程式之上架設代理程式來進行高效的水平擴展;Go語言提供Web應用測試工具,這些工具可以模擬出一個Web伺服器,並對伺服器產生的回應(response)進行記錄。

go語言能做web嗎

本教學操作環境:windows10系統、GO 1.11.2、thinkpad t480電腦。

Web  介紹

Web 應用在我們的生活中無所不在。看看我們日常使用的各個應用程序,它們要么是 Web 應用,要么是移動 App 這類 Web 應用的變種。無論哪一種程式語言,只要它能夠開發出與人類互動的軟體,它就必然會支援 Web 應用開發。對一門嶄新的程式語言來說,它的開發者首先要做的一件事,就是建立與互聯網(internet)和萬維網(World Wide Web)交互的庫(library)和框架,而那些更為成熟的程式語言還會有各種五花八門的Web 開發工具。

Go 是一門剛開始嶄露頭角的語言,它是為了讓人們能夠簡單且有效率地編寫後端系統(back end system)而創建的。這門語言擁有眾多先進的特性,並且密切關注程式設計師的生產力以及各種與速度相關的事項。和其他語言一樣,Go 語言也提供了對 Web 程式設計的支援。

本節實驗將列舉一些使用 Go 編寫 Web 應用的優點,並介紹一些關於 Web 應用的基本知識。

使用Go 語言建立Web 應用程式

#Go 是一門相對比較年輕的程式語言,它擁有繁榮並且仍在不斷成長的社區,而且它也非常適合用來編寫那些需要快速運行的伺服器端程式。因為 Go 語言提供了許多過程式語言的特性,所以擁有過程式語言使用經驗的程式設計師對 Go 應該都不會感到陌生,但同時,Go 語言也提供了函數式程式設計的特性。除了內建對同時程式設計的支援之外,Go 語言還擁有現代化的套件管理系統、垃圾收集特性以及一系列包羅萬象、威力強大的標準函式庫。

雖然 Go 自帶的標準函式庫已經非常豐富且宏大了,但 Go 仍然擁有許多高品質的開源函式庫,它們可以對標準函式庫不足的地方進行補充。

使用Go 語言進行Web 開發正變得日益流行,許多公司都已經開始使用Go 了,其中包括像Dropbox、SendGrid 這樣的基礎設施公司,Square 和Hailo 這樣的技術驅動的公司,甚至是BBC、紐約時報這樣的傳統公司。

在開發大規模 Web 應用程式方面,Go 語言提供了一種不同於現有語言和平台但又切實可行的方案。大規模可擴展的Web 應用通常需要具備以下特質:

  • #可擴充;
  • #模組化;
  • 可維護;
  • 高性能。

可擴展

大規模的Web 應用程式應該是可擴展的(scalable),這意味著應用程式的管理者應該能夠簡單、快速地提升應用程式的效能以便處理更多請求。如果一個應用是可擴展的,那麼它就是線性的,這意味著應用的管理者可以透過添加更多硬體來獲得更強的請求處理能力。

有兩種方式可以擴展效能:

  • #垂直擴展(vertical scaling),即提升單一裝置的CPU 數量或效能;
  • ##水平擴展(horizo​​ntal scaling),即透過增加計算機的數量來提升效能。
因為Go 語言擁有非常優異的並發編程支持,所以它在垂直擴展方面擁有不俗的表現:一個Go Web 應用只需要使用一個操作系統線程(OS thread),就可以透過調度來高效地運行數十萬個goroutine。

跟其他 Web 應用程式一樣,Go 也可以透過在多個 Go Web 應用程式之上架設代理程式來進行高效率的水平擴充。因為 Go Web 應用程式都會被編譯為不包含任何動態依賴關係的靜態二進位文件,所以我們可以把這些文件分發到沒有安裝 Go 語言的系統裡,從而以一種簡單且一致的方式部署 Go Web 應用。

模組化

大規模Web 應用程式應該由可替換的元件構成,這種做法能夠使開發者更容易新增、移除或修改特性,從而更能滿足程式不斷變化的需求。除此之外,這種做法的另一個好處是使開發者可以透過重複使用模組化的元件來降低軟體開發所需的成本。

儘管 Go 是一門靜態類型語言,但使用者可以透過它的介面機制對行為進行描述,以此來實現動態類型匹配(dynamic typing)。 Go 語言的函數可以接受介面作為參數,這意味著使用者只要實作了介面所需的方法,就可以在繼續使用現有程式碼的同時向系統中引入新的程式碼。同時,因為 Go 語言的所有類型都實作了空接口,所以使用者只需要建立出一個接受空接口作為參數的函數,就可以把任何類型的值用作該函數的實際參數。此外,Go 語言還實現了一些在函數式程式設計中非常常見的特性,其中包括函數類型、使用函數作為值以及閉包,這些特性允許使用者使用現有的函數來建立新的函數,從而幫助使用者構建出更為模組化的程式碼。

Go 語言也常會被用來建立微服務(microservice)。在微服務架構中,大型應用通常由多個規模較小的獨立服務組合而成,這些獨立服務通常可以相互替換,並根據它們各自的功能進行組織。例如,日誌記錄服務會被歸類為系統級服務,而開立帳單、風險分析這樣的服務則會被歸類為應用程式級服務。創建多個較小的 Go 服務並將它們組合為單一 Web 應用,這種做法使得我們可以在有需要的時候對應用程式中的服務進行替換,而整個 Web 應用程式也會因此變得更加模組化。

可維護

和其他龐大且複雜的應用程式一樣,擁有一個易於維護的程式碼庫(codebase)對大規模的Web應用來說也是非常重要的。這是因為大規模的應用通常都會不斷地成長和演化,所以開發者需要經常性地回顧並修改程式碼,而修改難懂、笨拙的程式碼需要花費大量的時間,並且隱含著可能會造成某些功能無法正常運作的風險。因此,確保原始程式碼能夠以適當的方式組織起來並且具有良好的可維護性對開發者來說就顯得至關重要了。

Go 語言的設計鼓勵良好的軟體工程實踐,它擁有簡潔且極具可讀性的語法以及靈活且清晰的套件管理系統。除此之外,Go 語言還有一整套優秀的工具,它們不僅可以增強程式設計師的開發體驗,還能夠幫助他們寫出更具可讀性的程式碼,例如以標準化方式對Go 程式碼進行格式化的來源程式碼格式化程式gofmt 就是其中一個例子。

因為Go 語言希望文件可以和程式碼一同演進,所以它的文件工具godoc 會對Go 原始碼及其註解進行語法分析,然後以HTML、純文字或其他多種格式建立出對應的文件. godoc 的使用方法非常簡單,開發者只需要把文件寫到原始碼裡面,godoc 就會把這些文件以及與之相關聯的程式碼提取出來,產生對應的文件文件。

除此之外,Go 還內建了對測試的支援:gotest 工具會自動尋找與原始程式碼處於同一個套件(package)之內的測試程式碼,並執行其中的功能測試和效能測試。 Go 語言也提供了 Web 應用測試工具,這些工具可以模擬出一個 Web 伺服器,並對該伺服器產生的回應(response)進行記錄。

高效能

高效能不僅意味著能夠在短時間內處理大量請求,還意味著伺服器能夠快速地對客戶端進行回應,並讓終端用戶(end user)能夠快速地執行操作。

Go 語言的一個設計目標是提供接近C 語言的效能,儘管這個目標目前尚未達成,但Go 語言現在的效能已經非常具有競爭力:Go 程式會被編譯為本地碼(native code),這通常意味著Go 程式可以運行得比解釋型語言的程式要快,並且就像前面說過的那樣,Go 語言的goroutine 對並發程式設計提供了非常好的支持,這使得Go 應用可以同時處理多個請求。

推薦學習:Golang教學

以上是go語言能做web嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!