自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Go編程語言的真正優(yōu)點是什么?

譯文
開發(fā)
為什么Docker和Kubernetes等項目的開發(fā)者會選擇 Go作為開發(fā)語言 ?Go 的特征優(yōu)勢是什么,它與其他編程語言有什么不同,最適合構(gòu)建什么樣的項目?

在其十多年的發(fā)展歷程中,Google 的Go 語言(又名Golang )已經(jīng)從極客的好奇心發(fā)展成為一些重要云中心項目背后久經(jīng)考驗的編程語言。

為什么DockerKubernetes等項目的開發(fā)者會選擇 Go作為開發(fā)語言 ?Go 的特征優(yōu)勢是什么,它與其他編程語言有什么不同,最適合構(gòu)建什么樣的項目?在本文中,我們將探討 Go 的功能集、最佳用例、語言的遺漏和限制,以及 Go 的發(fā)展方向。

Go 語言小而簡單

Go,或者通常所說的 Golang,是由谷歌員工開發(fā)的——主要是長期的 Unix 大師和谷歌杰出工程師 Rob Pike——但嚴格來說,它并不是一個“谷歌項目”。相反,Go 是作為一個社區(qū)主導的開源項目開發(fā)的,由領(lǐng)導層帶頭,他們對 Go 的使用方式和語言的發(fā)展方向有強烈的看法。

Go 意味著易于學習、易于使用并且易于其他開發(fā)人員閱讀。Go 沒有大量的功能集,尤其是與 C++ 等語言相比。Go 的語法讓人想起 C,這使得長期 C 開發(fā)人員學習起來相對容易。也就是說,Go 的許多特性,尤其是它的并發(fā)和函數(shù)式編程特性,都可以追溯到 Erlang 等語言。

作為一種用于構(gòu)建和維護各種跨平臺企業(yè)應用程序的類 C 語言,Go 與 Java 有很多共同之處。作為一種能夠快速開發(fā)可能在任何地方運行的代碼的方法,您可以在 Go 和 Python 之間進行比較,盡管差異遠大于相似之處。

Go 語言適合每個人

Go 文檔將 Go 描述為“一種快速、靜態(tài)類型的編譯語言,感覺就像是一種動態(tài)類型的解釋語言。” 即使是大型 Go 程序也將在幾秒鐘內(nèi)編譯。此外,Go 避免了 C 樣式包含文件和庫的大部分開銷。

Go 以多種方式使開發(fā)人員的生活變得輕松。

Go很方便

在滿足許多常見編程需求的能力方面,Go 與 Python 等腳本語言進行了比較。其中一些功能內(nèi)置在語言本身中,例如用于并發(fā)和線程類行為的“goroutines”,而 Go 標準庫包中提供了其他功能,例如 Go 的 http 包。與 Python 一樣,Go 提供了自動內(nèi)存管理功能,包括垃圾收集。

與 Python 等腳本語言不同,Go 代碼編譯為快速運行的本機二進制文件。與 C 或 C++ 不同的是,Go 的編譯速度非??臁阋宰屖褂?Go 感覺更像是使用腳本語言而不是編譯語言。此外,Go 構(gòu)建系統(tǒng)沒有其他編譯語言那么復雜。構(gòu)建和運行 Go 項目只需要幾個步驟和很少的簿記。

Go運行很快

Go 二進制文件的運行速度比 C 對應的要慢,但對于大多數(shù)應用程序來說,速度上的差異可以忽略不計。對于絕大多數(shù)工作而言,Go 的性能與 C 一樣好,并且通常比其他以開發(fā)速度著稱的語言(例如 JavaScript、Python 和 Ruby)快得多。

Go 是便攜式的

使用 Go 工具鏈創(chuàng)建的可執(zhí)行文件可以獨立存在,沒有默認的外部依賴項。Go 工具鏈可用于各種操作系統(tǒng)和硬件平臺,并可用于跨平臺編譯二進制文件。

Go 是可互操作的

Go 在不犧牲對底層系統(tǒng)的訪問的情況下提供了上述所有功能。Go 程序可以與外部 C 庫對話或進行本地系統(tǒng)調(diào)用。例如,在 Docker 中,Go 與低級 Linux 函數(shù)、cgroup 和命名空間接口,以發(fā)揮容器的魔力。

Go 得到廣泛支持

Go 工具鏈可作為 Linux、MacOS 或 Windows 二進制文件或 Docker 容器免費提供。Go 默認包含在許多流行的 Linux 發(fā)行版中,例如 Red Hat Enterprise Linux 和 Fedora,這使得將 Go 源代碼部署到這些平臺變得更加容易。從 Microsoft Visual Studio Code 到 ActiveState 的 Komodo IDE,許多第三方開發(fā)環(huán)境對 Go 的支持也很強大。

Go 語言在哪里工作得最好

沒有一種語言適合所有工作,但有些語言比其他語言適合更多的工作。

Go 最適合開發(fā)以下應用程序類型。

云原生開發(fā)

Go 的并發(fā)和網(wǎng)絡特性以及高度的可移植性使其非常適合構(gòu)建云原生應用程序。事實上,Go 曾被用于構(gòu)建云原生計算的多個基石,包括Docker、KubernetesIstio。

分布式網(wǎng)絡服務

網(wǎng)絡應用程序的生死取決于并發(fā),而 Go 的原生并發(fā)特性——主要是goroutine通道——非常適合這種工作。因此,許多 Go 項目用于網(wǎng)絡、分布式功能和云服務:APIWeb 服務器、 Web 應用程序的最小框架等。

實用程序和獨立工具

Go 程序編譯成具有最少外部依賴的二進制文件。這使得它們非常適合創(chuàng)建實用程序和其他工具,因為它們可以快速啟動并且可以很容易地打包以便重新分發(fā)。一個示例是 稱為 Teleport 的訪問服務器(用于 SSH 等)。Teleport 可以通過從源代碼編譯或下載預構(gòu)建的二進制文件快速輕松地部署在服務器上。

Go 語言限制

Go 的自以為是的功能集既受到贊揚也受到批評。Go 的設(shè)計傾向于小而易于理解,故意省略了某些功能。結(jié)果是某些在其他語言中很常見的功能在 Go 中根本不可用——這是故意的。

一個長期存在的抱怨是缺乏通用函數(shù),它允許函數(shù)接受許多不同類型的變量。多年來,Go 的開發(fā)團隊一直反對在語言中添加泛型,理由是他們想要一種語法和一組行為來補充 Go 的其余部分。但從 2022 年初發(fā)布的 Go 1.18 開始,該語言現(xiàn)在包含泛型語法。要吸取的教訓是,Go 很少添加主要功能,而且只有經(jīng)過深思熟慮,才能更好地保持跨版本的廣泛兼容性。

Go 的另一個潛在缺點是生成的二進制文件的大小。Go 二進制文件默認是靜態(tài)編譯的,這意味著運行時所需的一切都包含在二進制映像中。這種方法簡化了構(gòu)建和部署過程,但代價是簡單的“你好,世界!” 在 64 位 Windows 上重約 1.5MB。Go 團隊一直在 努力在 每個后續(xù)版本中減小這些二進制文件的大小。也可以 通過壓縮刪除 Go 的調(diào)試信息來縮小 Go 二進制文件。最后一個選項對于獨立的分布式應用程序可能比對于云或網(wǎng)絡服務更有效,如果服務出現(xiàn)故障,則擁有調(diào)試信息很有用。

Go 的另一個被吹捧的特性,自動內(nèi)存管理,可以被視為一個缺點,因為垃圾收集需要一定量的處理開銷。按照設(shè)計,Go 不提供手動內(nèi)存管理,Go 中的垃圾收集因無法很好地處理企業(yè)應用程序中出現(xiàn)的各種內(nèi)存負載而受到批評。

也就是說,每個新版本的 Go 似乎都改進了內(nèi)存管理功能。例如,Go 1.8顯著縮短了垃圾收集的延遲時間。Go 開發(fā)人員確實有能力在 C 擴展中使用手動內(nèi)存分配,或者通過 第三方手動內(nèi)存管理庫,但大多數(shù) Go 開發(fā)人員更喜歡本地解決方案來解決這些問題。

圍繞為 Go 應用程序(例如桌面應用程序中的那些)構(gòu)建豐富的 GUI 的軟件文化仍然是分散的。

大多數(shù) Go 應用程序都是命令行工具或網(wǎng)絡服務。也就是說,各種項目正在努力為 Go 應用程序帶來豐富的 GUI。GTKGTK3 框架有綁定 。另一個項目旨在提供 平臺原生 UI,盡管這些依賴于 C 綁定并且不是用純 Go 編寫的。而Windows用戶可以試試 walk。但是在這個領(lǐng)域還沒有出現(xiàn)明確的贏家或安全的長期賭注,一些項目,比如谷歌試圖建立一個 跨平臺的 GUI 庫,已經(jīng)被擱置了。此外,由于 Go 在設(shè)計上是獨立于平臺的,因此這些都不太可能成為標準包集的一部分。

盡管 Go 可以與本機系統(tǒng)函數(shù)通信,但它并不是為創(chuàng)建低級系統(tǒng)組件而設(shè)計的,例如內(nèi)核或設(shè)備驅(qū)動程序或嵌入式系統(tǒng)。畢竟,Go 應用程序的 Go 運行時和垃圾收集器依賴于底層操作系統(tǒng)。(對此類工作的尖端語言感興趣的開發(fā)人員可能會研究Rust 語言。)

Go語言的局限

Go 的未來發(fā)展將更多地轉(zhuǎn)向其開發(fā)者群體的需求,Go 的思想者會改變語言以更好地適應這些受眾,而不是通過頑固的榜樣來引領(lǐng)。一個典型的例子是泛型,在對最好的方法進行了深思熟慮之后,最終將其添加到語言中。

2021 年 Go 開發(fā)者調(diào)查發(fā)現(xiàn) ,Go 用戶總體上對該語言提供的功能感到滿意,但也提到了很大的改進空間。Go 用戶希望改進的主要領(lǐng)域是依賴管理(Go 中的一個持續(xù)挑戰(zhàn))、診斷錯誤和可靠性,而內(nèi)存、CPU 使用率、二進制大小和構(gòu)建時間等問題的排名要低得多。

大多數(shù)語言都傾向于一組核心用例。在圍棋出現(xiàn)的十年里,它的利基市場已經(jīng)變成了網(wǎng)絡服務,它可能會繼續(xù)擴大其占有率??偟膩碚f,該語言引用的主要用例是創(chuàng)建 API 或 RPC 服務 (49%),其次是數(shù)據(jù)處理 (10%)、Web 服務 (10%) 和 CLI 應用程序 (8%)。

Go 語言越來越受歡迎的另一個標志是有多少開發(fā)人員在評估后選擇了它。在考慮使用 Go 進行項目的受訪者中,75% 的人選擇了該語言。在沒有選擇 Go 的人中,Rust (25%)、Python (17%) 和 Java (12%) 是首選。這些語言中的每一種都已經(jīng)或正在尋找其他利基:Rust 用于安全和快速的系統(tǒng)編程用于原型設(shè)計、自動化和粘合代碼的 Python ;和用于長期企業(yè)應用程序的Java 。

Go 的速度和開發(fā)簡單性將在多大程度上將其帶入其他用例,或者 Go 將在多大程度上滲透到企業(yè)開發(fā)中,還有待觀察。但是 Go 作為主要編程語言的未來已經(jīng)得到保證——當然在云中,Go 的速度和簡單性簡化了可長期維護的可擴展基礎(chǔ)設(shè)施的開發(fā)。

原文標題:??What’s the Go programming language really good for???

責任編輯:黃顯東
相關(guān)推薦

2021-11-09 23:15:20

編程語言本質(zhì)

2010-03-19 18:00:43

Java編程語言

2010-04-19 16:42:14

OraclePL

2020-08-02 19:55:46

Python編程語言技術(shù)

2012-05-16 13:11:28

編程語言開發(fā)語言Java

2022-08-26 09:51:49

索引簽名編程語言

2010-03-11 14:13:20

Python編程

2015-06-09 15:28:14

編程能力編程

2010-03-10 16:52:00

Python 編程語言

2019-02-11 08:32:22

編程語言Go

2010-03-24 14:55:19

Python編程語言

2020-11-05 09:47:48

云計算IT技術(shù)

2014-12-08 09:47:48

Go

2023-11-06 13:32:38

Go編程

2009-12-10 10:33:09

Go語言

2023-07-06 10:45:03

CIO領(lǐng)導力

2021-01-04 08:00:00

開發(fā)Kubernetes人工智能

2010-08-04 09:13:36

Hyper-V快照

2021-07-23 10:11:33

物聯(lián)網(wǎng)IOT

2023-05-24 09:31:51

CGo
點贊
收藏

51CTO技術(shù)棧公眾號