日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

为什么我爱Golang

發布時間:2023/12/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 为什么我爱Golang 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我喜歡Go編程語言,或者有人稱它為Golang。 很簡單,也很棒。

我在切線上寫這個。 沒想到Golang會這么好。

我首先在2016年1月左右回去,那里有一個相對較小但熱情的社區。

當時我并沒有考慮太多,我在磨練自己的編程技能,而Golang只是我用來完成任務的工具。

甚至在一年前,使用go還是很棒的。 一旦掌握了通用語言,該過程就很簡單了。

我為Visualead (我工作的公司)編寫了關鍵代碼,但它并沒有讓我們失望,一年后仍在生產中運行,此后零維護。

最近,我發現自己再次使用Golang,不得不寫關于我愛上Golang的原因。

GOPATH環境

這是您開始使用Go編寫后必須首先處理的事情之一。

在計算機上的任何位置設置GOPATH目錄,其中包含bin,src和pkg目錄,您就可以開始編寫了。

// How the directory structure looks like: go - bin - pkg - src

在我的主目錄下,我為所寫的每種編程語言創建一個新目錄。我的用戶主目錄中充滿以下文件夾:

chef cpp elixir elm go javascript meteor ocaml php python scala

除了Go之外,這些語言都沒有強制執行此結構。 Go會強制您為所有Golang物品定義一個根目錄,并且這樣做的確有充分的理由。

Golang應用程序

是否要創建新的Golang應用程序? 簡單。

轉到$ GOPATH / src目錄,創建一個新文件夾,創建一個新文件。go,調用包main,添加一個func main(){}函數即可。 從那一刻開始,您就可以使用所有的Go功能。

更多關于Go的好東西即將出現! 但首先要談談Golang模塊。

Golang模塊

我最喜歡的編程范例做得很好。 我認為模塊系統是面向對象類系統的一種替代。

Golang稱其為模塊包。 因此,從現在開始,每當我們說一個模塊時,我們就意味著一個包,反之亦然。

Module == Package == Module

在Golang中,您創建的每個目錄都將成為一個包。 如果包的名稱為main,則它可以成為應用程序。這有助于將代碼自然地分離為可管理的邏輯塊。

您始終希望從可重用的組件或程序包(如果使用Golang)中創建業務邏輯。

在我當前的應用程序中,我必須處理某些文件中的某些行,并在完成后將其上傳到AWS S3。

我的應用程序結構如下所示:

src - my_app - - main.go - - main_test.go - - uploader - - - uploader.go - - - uploader_test.go - - replace_file_lines - - - replace.go - - - replace_test.go - - - strings_util.go - - - strings_util_test.go

_test.go文件當然是為Golang進行單元測試文件的方式,Golang具有內置的測試框架。

對于那些來自面向對象語言的人來說,也可以認為這里的每個目錄都是完整的靜態類,.go文件中的每個函數或變量都將成為屬性或方法。

這是一個replace.go可能看起來像的示例:

如果一個目錄共享多個.go文件,則所有方法和變量在整個程序包之間共享,甚至在私有程序包之間也是如此。 它有助于將包分成更小的塊,并避免大的單個文件。

在不涉及面向對象與功能/過程的情況下,重要的是要知道Go創建者決定不將經典類包括在語言中。 相反,選擇使用結構/接口和程序包。

Golang Gofmt

Golang約定了所有內容的外觀,每種情況和每行所需的確切間距。

這使開發人員可以專注于編寫代碼,而不是對花括號位置發動戰爭。

舊的{} vs {\ n}戰爭:

或者,也許我只是因為我一方在圍棋中獲勝而感到高興?

在此處了解更多信息: https : //golang.org/cmd/gofmt/

Golang導入

導入始終相對于GOPATH / src。 總是。 我不能高估這個決定為我節省了多少挫敗感。

警告:下一行有意混淆。

在使用其他語言時,您可以使用相對/絕對導入,或者以某種方式設置一個怪異的導入,該導入將允許您從不知道位置的位置導入文件(我在看Python)。

Go以獨特的方式解決了問題。 所有導入,無論在哪個文件中,都始終相對于GOPATH / src

因此,在my_app的情況下,其主要導入將如下所示:

my_app在src下,因此我們需要先提及它,然后導入my_app下存在的包,例如uploader和replace_file_lines。 注意,我們不是導入單個文件,而是導入整個包。 像魅力一樣工作并引起零混亂。

此外,除非您實際使用導入的軟件包,否則Golang不會編譯,此小功能可幫助您知道實際使用了每個導入。

期望您的程序員編寫干凈的代碼而沒有未使用的導入? 您為什么不讓當地的Gopher來照顧呢?

Golang Get系統

導入部分將引導我們轉到Golang的下一個重要功能,即go get功能。 雖然其他人對JavaScripts NPM軟件包管理器印象深刻,但Go只是使用任何git存儲庫作為其軟件包管理器。

它是如何工作的?

我之前寫過我需要上傳到S3,對嗎? 那么那意味著我需要AWS開發工具包來完成該任務。

為了使這項工作有效,我只需打開終端并輸入:

go get github.com/aws/aws-sdk-go

這里發生了什么? 沒什么特別的,Golang只是從https://github.com/aws/aws-sdk-go下載回購文件到您的GOPATH / src目錄中。

然后,只需使用aws-sdk即可導入它:

還記得所有導入都相對于GOPATH / src嗎? 由此可見,例如s3包現在位于GOPATH / src / github.com / aws / aws-sdk-go / services / s3下。

簡單。 優雅。 地鼠的另一顆星。

Golang構建和打包系統

到目前為止,我們一直將重點放在GOPATH / src上,但還有其他目錄需要我們處理,即GOPATH / pkg和GOPATH / bin。

Golang是一種編譯語言,這意味著必須對其進行編譯才能運行。 Golang快速編譯。 它是如何工作的?

每次編譯代碼以運行它時,Golang都會在與包相同的路徑中僅在GOPATH / pkg目錄下創建一個.a文件。 這意味著,例如,如果您編譯aws-sdk。 它將被編譯一次,并在所有其他代碼之間共享。

當然,這并不是Golang快速編譯的唯一原因,但這只是一個介紹,可以幫助您了解GOPATH / pkg的作用

現在,GOPATH / bin呢? 當您運行go install命令時,go將創建一個二進制文件,并將其放在GOPATH / bin下,在本例中,該文件將獲得主軟件包目錄my-app的名稱。

為什么這么好? 好了,您可以將GOPATH / bin添加到全局PATH變量中,并且您的構建的所有二進制文件都可以在命令行中使用,而無需執行任何額外的工作! (很棒:D嗎?)

Golang跨平臺構建

部署到其他發行版而不是編寫代碼的發行版? 好吧,不用擔心,您不需要Windows機器就可以為Windows構建代碼。 高朗讓你受夠了。

趕緊跑:

GOOS=windows GOARCH=amd64 go install

并且我們的代碼將輸出一個二進制文件,準備在Windows機器上進行部署。 .exe文件將出現在GOPATH / bin / windows_amd64 / my_app.exe中。 像在公園散步。

Golang語言

Golang旨在成為一種簡單的語言。

我喜歡以下帖子,詢問為什么Go并非設計成功能語言: https : //www.quora.com/Why-wasnt-Go-writing-as-a-functional-language

“在Google工作的程序員是職業生涯的早期,并且最熟悉過程語言,尤其是C家族的語言。 需要以一種新的語言快速提高程序員的工作效率,這意味著該語言不能過于激進。”

而且很簡單。

以下是Golang不支持的一些功能:

  • 班級
  • 運算符超載
  • 函數重載
  • 可選參數
  • 例外情況
  • 盡管有時我發現自己在使用Go編寫語言時缺少語言功能,但我總是可以做我想做的所有事情。 只是有時它需要更多的寫作和思考。 最重要的是,它導致代碼更容易推理,因為它不那么抽象。

    有時候,這使我感到驚訝,因為沒有那么多年的經驗,僅僅因為該語言是如此的融洽和清晰,我就能以多么快的速度實現目標。

    Golang并發

    我出于最后目的離開了并發性討論。 為什么? 因為我認為這并不重要。

    這是該語言的驚人功能。 但有時它被視為Go的本質,但我認為并非如此。

    因此,讓我嘗試將其總結為一個段落。

    是的,Golang具有很好的并發性。 您無需處理線程,而是創建廉價的goroutine,這些例程易于制造和管理。 Goroutine允許您在所有CPU上分配負載,而不必擔心如何管理所有負載。

    仍然對了解goroutines感興趣嗎? 在這里閱讀有關它們的信息: https : //tour.golang.org/concurrency/1

    戈朗地鼠

    來吧,他真可愛!

    我是否提到我是函數式編程的狂熱者? 那為什么我對Golang如此著迷呢? 它甚至沒有關于mondas的概念。 誰知道……宇宙以神秘的方式運轉。

    From: https://hackernoon.com/why-i-love-golang-90085898b4f7

    總結

    以上是生活随笔為你收集整理的为什么我爱Golang的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。