RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Go編程語言-你應(yīng)該知道的一切

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2023-12-11 17:37 ? 次閱讀

Go 編程語言為開發(fā)者社區(qū)所熟知已有幾年,但絕對仍然令人驚嘆。它成功地保持了最受歡迎的10 種語言的地位,這并非沒有原因。超過 80,000 名開發(fā)者分享了他們的意見。Golang 獲得了近 63% 的“喜愛”選票。我們無法想象更好的建議,但無論如何我們準(zhǔn)備了這份概述,在我看來,是為了向您提供有關(guān) Go 編程語言的最重要的信息。

Go 語言簡史

Go 編程語言的故事始于 Google,當(dāng)時三位工程師 Robert Griesemer、Rob Pike 和 Ken Thompson 對 C++ 的復(fù)雜性以及缺乏提供高效編譯和執(zhí)行的簡單語言感到厭倦。這就是為什么在 2007 年 9 月 21 日,他們開始設(shè)計一種新語言。他們花了兩年時間,在 2009 年 11 月 10 日,Go 編程語言成為公共開源項目。又過了三年,2012 年 3 月,Go 語言 1.0 版本發(fā)布。

Go 發(fā)明者的主要目標(biāo)是將解釋型動態(tài)類型語言的編程簡便性與靜態(tài)類型編譯語言的效率和安全性結(jié)合起來。此外,Go語言旨在支持網(wǎng)絡(luò)和多核計算,并加速編碼過程。

為了實現(xiàn)這些目標(biāo),格里塞默、派克和湯普森注重簡單性。這就是為什么 Go 語言的語法受到 C 家族的啟發(fā)。其他輸入,例如來自 Pascal,您可以在聲明和包中注意到。其他靈感來自 Newsqueak 和 Limbo - 他們幫助創(chuàng)建了 Go 的并發(fā)方面。這使得這種編程語言融合了這些不同解決方案的最佳功能。

它叫Golang還是Go?我們回答

Go 編程語言通常稱為 Golang。這是為什么?原因很簡單 - 當(dāng)時“go.org”域名不可用,因此程序員決定推出 golang.org(Go 和語言的混合體)。因此,官方語言名稱是 Go,但官方 Twitter 標(biāo)簽是#golang。

什么是 Go 語言?

牢記上述所有內(nèi)容,Robert Griesemer、Rob Pike 和 Ken Thompson 將 Go 打造為一種可編譯、并發(fā)、垃圾收集、靜態(tài)類型的語言。他們希望由精通編程的程序員為社區(qū)打造最有效的語言。

Golang 語言有何特別之處?

盡管已有 12 年的歷史,Go 仍然越來越受歡迎,它是一種常用的編程語言,因為它在一個方便的包中提供了獨特的優(yōu)勢。Go 流行的另一個原因是 Go 是一種旨在創(chuàng)建后端的通用語言(GPL)。在 2012 年的 Strange Loop 會議上,Andrew Gerrand 將 Go 介紹為“優(yōu)雅增長的代碼”。Golang 的一些優(yōu)勢(如下所列)證明這個引用仍然是最新的。

Go Proverbs是關(guān)于 Go 本質(zhì)的有力引用列表。Rob Pike 說“ Gofmt 的風(fēng)格沒人喜歡,但 gofmt 卻是每個人都喜歡的?!?即使,特別是在開始時,您對使用大括號等的必要性不滿意,但最終您會欣賞 gofmt。只有一種標(biāo)準(zhǔn)在運行——而不是像大多數(shù)編程語言那樣有多種約定。Gofmt 作為一款專用工具,在市場上非常出色,對于保持凝聚力確實有幫助。

代碼簡單

Go 的語法相對較小,并且大致保持不變,沒有任何大的變化。更重要的是,只有一種標(biāo)準(zhǔn)代碼格式(由fmt工具生成)。Go 語法缺乏變化也對開發(fā)人員有幫助。它幾乎保持不變,因此代碼不會過于復(fù)雜,并且無需學(xué)習(xí)新的范例或語法。這使得它變得透明、易于學(xué)習(xí)和理解。所有這一切都可以歸結(jié)為 Go 創(chuàng)建者的一句話:兼容性的承諾。如果您使用新版本的 Go,幾乎所有用舊版本編程語言編寫的程序仍然可以編譯和運行,不需要任何更改。這使得它非常容易維護(hù)。

適合 Go 開發(fā)人員的最佳 IDE 和編輯器

作為一個開源項目,Go 提供了對所需開發(fā)工具的輕松訪問。有多種:

IDE:

JetBrains 的 GoLand 是一款跨平臺 IDE,具有動態(tài)錯誤檢測和修復(fù)建議、一步撤消重構(gòu)、智能代碼完成、死代碼檢測、文檔提示和 git 集成等功能。

GoClipse - 支持 Go 編程語言的 Eclipse IDE。

LiteIDE - 這個開源和跨平臺解決方案包括可配置的構(gòu)建命令、代碼編輯器和管理以及廣泛的 Go 支持。

Zeus IDE 是一款適用于 Windows 平臺的 IDE,借助用于自動完成、文檔和代碼導(dǎo)航的 gocode 以及用于自動代碼格式化的 gofmt 和 goimports 等工具,使開發(fā)人員的工作更加輕松。

編輯:

VSCode - 具有廣泛 Go 支持的代碼編輯器,提供語言代碼導(dǎo)航、符號搜索、括號匹配和片段等功能。

和插件:

VIM-go - 這個定期更新的 Vim 插件提供 Go 包編譯、折疊和語法突出顯示以及集成的 delve 支持。

比這些工具更有趣的是,Go 創(chuàng)建者建立了一個在線環(huán)境,您可以在其中測試用 Go 編程語言編寫的產(chǎn)品 - Go Playground。

Go 編程語言速度很快

關(guān)于 Go 的普遍看法是它是一種快速的編程語言。這些不僅僅是空話——這個比較清楚地證明了這一點。與 Python 相比,這些數(shù)字顯然有利于 Go 一方。

但如果我們談?wù)撍俣?,究竟是什么?Go 語言脫穎而出呢?答案可能是 Goroutines,它同時執(zhí)行活動。Goroutine 是由 Go 運行時管理的輕量級線程。它比操作系統(tǒng)中的線程消耗更少的資源,并且當(dāng)您比較這兩種解決方案時,創(chuàng)建它們的成本肯定更低。

并發(fā)范式

如果一個程序支持并發(fā)范例,則意味著它可以在重疊的時間段內(nèi)(看似)同時處理多個任務(wù)/操作。Go 原生支持并發(fā)范式,它允許多線程、多處理和異步。Golang 運行時調(diào)度程序有助于管理創(chuàng)建并需要處理器時間的所有操作(Goroutines)。通道也有幫助——這些類型化的管道同步 Goroutines 并使它們之間的通信更加高效和流暢。

這些并不是工程師愿意使用的唯一 Go 功能 - 依賴管理、運行時反射的強(qiáng)大功能、垃圾收集和組件也是 Golang 的顯著優(yōu)勢。

在 CodiLime,我們在許多項目中利用了 Golang 的優(yōu)勢 - 例如當(dāng)我們構(gòu)建微服務(wù)安全平臺時為我們的客戶。

Golang 在實踐中最適合做什么

云原生開發(fā)

由于其并發(fā)性和網(wǎng)絡(luò)功能以及高度的可移植性,Go 對于構(gòu)建云原生應(yīng)用程序非常有用。云原生計算的幾個支柱,例如 Docker、Kubernetes 和 Istio,實際上是使用 Go 編程語言構(gòu)建的。

各種網(wǎng)絡(luò)服務(wù)

并發(fā)是網(wǎng)絡(luò)應(yīng)用程序的命脈,Go 的原生并發(fā)特性(主要是 goroutine 和通道)非常適合此類任務(wù)。因此,很多 Go 項目對于網(wǎng)絡(luò)、分布式任務(wù)和云服務(wù)很有用,例如 API、Web 服務(wù)器和 Web 應(yīng)用程序的簡單框架。

獨立工具和實用程序

Go 是一種編譯語言,這意味著應(yīng)用程序被編譯成二進(jìn)制文件。這些二進(jìn)制文件本身幾乎沒有外部依賴項,并且?guī)缀蹩梢栽谌魏蔚胤竭\行。由于 Go 中的程序啟動速度快,并且可以輕松打包以進(jìn)行重新分發(fā),因此它們對于開發(fā)實用程序和其他工具非常有用。一個實例是訪問服務(wù)器 Teleport(用于 SSH 等)。通過下載預(yù)構(gòu)建的二進(jìn)制文件或從源代碼構(gòu)建它,Teleport 可以快速、簡單地安裝在服務(wù)器上。

有哪些知名公司使用Go語言?

Go 的功能對許多行業(yè)都有幫助。這是事實,但并沒有讓任何事情變得更清楚!這就是為什么我選擇了一些(在我看來)最有趣的案例研究。您可以在Go 語言網(wǎng)站上找到?jīng)Q定在其項目中依賴 Go 的公司的完整列表。

谷歌

由 Google 開發(fā)人員創(chuàng)建的編程語言現(xiàn)在支持 Google 解決方案。Chrome優(yōu)化指南服務(wù)就是其中之一。這項基于 Go 的服務(wù)會為您的頁面加載提供改進(jìn)建議(以及實施更改的最佳時間)。另一個是 Firebase,它是 Google Cloud 客戶的托管移動平臺。最開始只是用Go寫了一個小服務(wù)。當(dāng)應(yīng)用程序開發(fā)完成后,工程師決定用 Go 語言完全替換 Node.js 后端代碼。

這兩個只是一個示例 - Google 在其他有趣的項目中使用 Go 。

kubernetes

Kubernetes 最初是由 Google 建立的,所以我將它們放在一起?,F(xiàn)在,它是由云原生計算基金會開發(fā)的一個單獨的項目。這個用于管理容器化工作負(fù)載和服務(wù)的開源容器編排系統(tǒng)是由 Google 創(chuàng)建的。而且,您毫無疑問可以猜到,它是用 Go 語言編寫的。使用這種編程語言的決定并不是家庭關(guān)系的結(jié)果,而是由于 Go 的快速工具、高質(zhì)量的庫和垃圾收集。

Uber

Uber 使用 AresDB——一個用 Go 編程語言編寫的實時分析儀表板。它使公司能夠有效地統(tǒng)一、簡化和改進(jìn)實時分析數(shù)據(jù)庫解決方案。AresDB 使用 Go 開發(fā),允許 Uber 放棄第三方數(shù)據(jù)庫解決方案并在內(nèi)部保留深入分析。

Docker

Docker, Inc. 產(chǎn)品(也稱為 Docker)是一種 PaaS(平臺即服務(wù)),可以在容器中交付軟件。正如您可能猜到的,Docker 是用 Go 構(gòu)建的。工程師的選擇是基于 Go 在 Linux 中工作的能力(作為選定的初始操作系統(tǒng)),以及將 Docker 的功能合并到其環(huán)境中的用戶友好路徑。本文解釋了為什么“Docker 找不到比 Go 更好的合作伙伴”。

PayPal

這家公認(rèn)的跨國金融技術(shù)公司支持在線匯款,是支票和匯票等傳統(tǒng)紙質(zhì)方法的替代方案。他們的支付處理平臺是用 C++ 開發(fā)的,但代碼的復(fù)雜性減慢了平臺現(xiàn)代化流程的速度。Go 被選為簡化和開發(fā)平臺的解決方案。

Dropbox

Dropbox 是一種用于存儲和共享文件以及項目協(xié)作的托管服務(wù)。隨著基礎(chǔ)設(shè)施的發(fā)展,Dropbox 團(tuán)隊開始尋找更有效地擴(kuò)展系統(tǒng)的解決方案。這就是為什么他們將關(guān)鍵的性能關(guān)鍵后端從 Python 轉(zhuǎn)移到 Go,因為它具有更好的并發(fā)支持和執(zhí)行速度。但還有更多 - Dropbox 的一些使用 Go 編程語言構(gòu)建的庫是開源的 - 示例可以在他們的網(wǎng)站上找到。這些用例展示了 Go 在特定環(huán)境中的表現(xiàn)。

什么時候 Golang 不是您項目的最佳選擇?

Go 的缺點

沒有一種解決方案適合所有用戶和案例。這同樣適用于 Go 語言。有何障礙?

有限的泛型支持——很長一段時間,Go 沒有泛型。最后,在 Go 1.18 中,引入了泛型類型和函數(shù)。然而,泛型并沒有得到完全支持。例如,具有通用參數(shù)的方法未實現(xiàn)。

較小的默認(rèn)庫 - 您可能會注意到缺少函數(shù),例如字符串和數(shù)字。

在某些情況下,Go 可能太簡單 - 您可能會錯過諸如 map 或 reduce 之類的函數(shù) - Go 編程語言不提供它們。

就像其他所有編程語言一樣,Go 也有其弱點。在我看來,了解它們至關(guān)重要,這樣您才能選擇最能滿足您需求的解決方案。

何時押注 Golang 語言

每種編程語言都有權(quán)衡,Golang 也不例外。例如,Python 中的腳本可以編寫得更快,因為沒有強(qiáng)制的編碼風(fēng)格和更多的語法糖,而 Go 可能需要更多的努力來生成代碼,因為它具有更明確的語法。

毫無疑問,Go 是一門有前途的語言,但它有特定的用途。它主要用于API/RPC服務(wù)和編寫CLI。人們對在不同領(lǐng)域使用 Go有著濃厚的興趣,但一些開發(fā)人員在這些領(lǐng)域工作時面臨著特定的障礙。Golang 主要是由 Google 開發(fā)的,旨在解決硬件資源受限的軟件可擴(kuò)展性問題。Go 對于解決處理時間瓶頸問題也很有用。

用戶群不斷擴(kuò)大的后期公司的后端經(jīng)常難以跟上活動量。由于 Golang 支持并發(fā)功能并具有最小的內(nèi)存占用,因此它非常適合服務(wù)器必須處理高需求的后端應(yīng)用程序。

Golang 是一種編程語言,Dropbox 使用它來有效管理其超過 5 億客戶的網(wǎng)絡(luò)。該語言也非常適合開發(fā)每月接待數(shù)百萬訪問者的電子商務(wù)網(wǎng)站。資源密集型服務(wù) Docker、Terraform 和 Kubernetes 均由 Golang 提供支持。

Go 背后有一個強(qiáng)大的社區(qū) - 在GitHub上,您可以找到一系列有用的信息:有關(guān)如何開始和使用 Go 語言的有用鏈接、其他知識來源、Slack 頻道、Go 會議的日期,但這還不是全部。還有許多書籍和播客值得您關(guān)注。當(dāng)新版本發(fā)布時,即使是 Go 創(chuàng)建者仍然會自己撰寫新的博客文章 - 開發(fā)人員可以提供他們的想法并做出貢獻(xiàn)??傊?,這一切都增強(qiáng)了社區(qū)和語言本身的能力。

Go 語言的局限性

選擇編程語言時,在做出決定之前了解其局限性非常重要。它將節(jié)省您的時間和金錢。

iOS應(yīng)用程序開發(fā)

這是有爭議的,但許多人聲稱 Golang 可能為構(gòu)建 iOS 應(yīng)用程序設(shè)置了限制。如果您訪問此類故障排除論壇,您會發(fā)現(xiàn)開發(fā)人員在回答有關(guān)基于 Golang 的 iOS 應(yīng)用程序開發(fā)的問題時遇到問題。

此外,對于只想在 Android 和 iOS 項目中使用一種語言的開發(fā)人員來說,Go 并不是一個完美的解決方案。因此,Go的發(fā)展有一定的局限性,并不總是一帆風(fēng)順。隨著 Golang 的發(fā)展,應(yīng)該預(yù)計 iOS 開發(fā)工具也會得到改進(jìn)。

不可調(diào)節(jié)

那些支持動態(tài)類型語言的人認(rèn)為這種靜態(tài)類型語言的編碼靈活性較低。當(dāng)然,這是此類編程語言的本質(zhì),但在為您的產(chǎn)品選擇最合適的選項時值得了解。

Go的未來發(fā)展

未來的 Go 開發(fā)將越來越關(guān)注其開發(fā)者社區(qū)的偏好和要求,Go 的維護(hù)者會修改語言以更好地服務(wù)于這些受眾,而不是樹立嚴(yán)格的先例。泛型就是一個典型的例子,在關(guān)于如何進(jìn)行的激烈爭論之后,泛型最終被納入到語言中。

2021 年 Go 開發(fā)者調(diào)查表明,雖然 Go 用戶普遍對該語言的功能感到滿意,但仍有很大的發(fā)展空間。依賴管理、Go 中的一個長期問題、錯誤診斷和可靠性是用戶請求更改的首要領(lǐng)域,而內(nèi)存利用率、CPU 使用率、二進(jìn)制大小和構(gòu)建時間等問題受到的關(guān)注要少得多。

Go 的速度和開發(fā)簡易性尚未在其他情況下得到充分利用,其在企業(yè)開發(fā)中的利用仍是未知數(shù)。然而,Go 作為一種重要的編程語言的未來已經(jīng)確定,尤其是在云中,它的速度和易用性使得構(gòu)建可長期保持的可擴(kuò)展基礎(chǔ)設(shè)施變得更加容易。

結(jié)論

Go 編程語言仍然不如 Python 流行,但它已經(jīng)在開發(fā)者世界中嶄露頭角。其簡約的語法、創(chuàng)新的 Goroutines 而不是典型的線程以及廣泛的工具甚至讓美國運通、Cloudflare、Facebook、微軟和 Netflix 等大公司都信服。該列表顯示了世界各地有多少家公司正在使用 Go 編程語言。它的長度令人印象深刻,而且還在不斷增長。如果您想知道是否給 Go 一個機(jī)會,也許這個建議會告訴您。在我看來,沒有比社區(qū)更好、更有力的見證了。

“優(yōu)雅地增長的代碼”也會隨著支持性社區(qū)和強(qiáng)大的可用工具而增長。這使得 Go 編程語言成為一個有競爭力且值得關(guān)注的選擇。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Go
    Go
    +關(guān)注

    關(guān)注

    0

    文章

    43

    瀏覽量

    12248
  • 編程語言
    +關(guān)注

    關(guān)注

    10

    文章

    1942

    瀏覽量

    34707
  • 編輯器
    +關(guān)注

    關(guān)注

    1

    文章

    805

    瀏覽量

    31163

原文標(biāo)題:Go 編程語言 - 你應(yīng)該知道的一切

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    關(guān)于ZigBee協(xié)議的一切都在這篇文章里

    關(guān)于ZigBee,下文采用問答形式向你詳細(xì)地介紹了方方面面,不夸口的說,所需要知道的關(guān)于ZigBee的一切,全在這里了!
    發(fā)表于 06-13 01:07 ?1427次閱讀

    如何選擇的第編程語言

    ?對此 Udacity 表示用戶選擇應(yīng)該根據(jù)四大標(biāo)準(zhǔn)來確定自己首次接觸的編程語言。首先是編程語言的應(yīng)用范圍例如你想要開發(fā)
    發(fā)表于 07-14 14:35

    Go語言及Beego框架環(huán)境搭建相關(guān)資料推薦

    1、Go語言及Beego框架環(huán)境搭建  在開始環(huán)境搭建之前,我們先起來看看:  Go有什么優(yōu)勢:  不用虛擬機(jī),它可直接編譯成機(jī)器碼,除了glibc外沒有其他外部依賴,部署十分方便,
    發(fā)表于 10-17 16:57

    一切從游戲開始_python

    一切從游戲開始_python
    發(fā)表于 03-19 11:23 ?7次下載

    淺析關(guān)于ZigBee的一切!

    本文采用問答形式向你詳細(xì)地介紹了方方面面,不夸口的說,所需要知道的關(guān)于 ZigBee的一切,在這里基本可以了解到!
    的頭像 發(fā)表于 08-22 17:14 ?5415次閱讀

    GO語言簡介!GO是理想的編程語言嗎?

    技術(shù)實力毋容置疑,不過這哥倆都是玩Kernel的,經(jīng)歷相同,理念相近,分歧會比較少,他們也都坦承C用得最多最熟,所以注定了GO的類C特性,不過這會不會導(dǎo)致GO設(shè)計上的思維火花不足,對OOP以及現(xiàn)代編程思想的支持不足,亦未可知。
    的頭像 發(fā)表于 04-29 09:47 ?4363次閱讀
    <b class='flag-5'>GO</b><b class='flag-5'>語言</b>簡介!<b class='flag-5'>GO</b>是理想的<b class='flag-5'>編程</b><b class='flag-5'>語言</b>嗎?

    C語言編程入門的必做題知道

    本文檔的主要內(nèi)容詳細(xì)介紹的是C語言編程入門的必做題知道
    發(fā)表于 11-05 08:00 ?0次下載

    芯片緊缺,正在影響一切硬件

    芯片緊缺,正在影響一切硬件,大到汽車,小到產(chǎn)線上的每個充電器、藍(lán)牙耳機(jī)。
    的頭像 發(fā)表于 12-29 14:22 ?4601次閱讀

    Go語言憑借什么成為云原生第一語言的?

    發(fā)展勢頭強(qiáng)勁,憑借其簡潔、高效的特性,在競爭激烈的編程語言市場中占據(jù)了席之地。 如果Go 的發(fā)展趨勢還不明朗的話,不妨仔細(xì)看看我后面
    的頭像 發(fā)表于 04-22 10:15 ?3183次閱讀
    <b class='flag-5'>Go</b><b class='flag-5'>語言</b>憑借什么成為云原生第<b class='flag-5'>一語言</b>的?

    世界上最賺錢的編程語言是什么?

    許多人因為薪資高而選擇編程行業(yè),但知道什么是世界上最賺錢的編程語言嗎?話不多說,讓我們用數(shù)據(jù)來證明一切
    的頭像 發(fā)表于 05-11 11:38 ?2747次閱讀
    世界上最賺錢的<b class='flag-5'>編程</b><b class='flag-5'>語言</b>是什么?

    go語言枚舉類型怎么用

    go 語言枚舉類型是這么用的?在什么場景下會用到枚舉?本文對 go 語言枚舉做了詳細(xì)講解。 枚舉,是種重要的數(shù)據(jù)類型,由
    的頭像 發(fā)表于 09-02 09:43 ?5174次閱讀

    關(guān)于數(shù)字電位器 (POT) 你想知道一切

    關(guān)于數(shù)字電位器 (POT) 你想知道一切
    發(fā)表于 11-14 21:08 ?0次下載
    關(guān)于數(shù)字電位器 (POT) 你想<b class='flag-5'>知道</b>的<b class='flag-5'>一切</b>

    關(guān)于步進(jìn)電機(jī)需要知道一切

    關(guān)于步進(jìn)電機(jī)需要知道一切
    發(fā)表于 03-07 16:58 ?1960次閱讀
    關(guān)于步進(jìn)電機(jī)<b class='flag-5'>你</b>需要<b class='flag-5'>知道</b>的<b class='flag-5'>一切</b>

    海爾智家:一切皆為用戶體驗!

    一切從用戶需求出發(fā),一切為了用戶的智慧家庭生活體驗。
    的頭像 發(fā)表于 04-25 13:35 ?548次閱讀

    文件系統(tǒng)-一切皆文件的設(shè)計理念

    所謂一切皆文件就是指計算機(jī)操作系統(tǒng)將一切計算機(jī)的可用資源都映射成文件形式向使用者提供統(tǒng)的操作方式。
    的頭像 發(fā)表于 10-11 10:10 ?584次閱讀
    RM新时代网站-首页