Go 一直是我個人職涯中的重要語言。當我在 Soundcast 擔任 CTO 時,我用它建立了一個可靠的音訊廣告伺服器和 SSP。 Go 讓網路和並行變得如此簡單,感覺就像作弊一樣。所有這些都具有非常好的性能,這對於我們必須完成的工作來說是完美的。
在第 1 部分中,我們揭示了軟體建置階段的基礎知識。在這篇文章中,我們將藉助一種在我心中佔有特殊地位的語言來使這一點變得更加相關。事實上,雖然不同語言建構軟體的基礎原理是相似的,但每種語言生態系統都有自己獨特的工具和實踐。
話不多說,讓我們來探討這些,特別關注 Go。
Go 由 Google 設計,採用獨特的建置方法,強調簡單性和速度。
Go 附帶了一個建置指令。此命令編譯由導入路徑命名的套件及其依賴項,但不安裝結果。它產生一個可執行檔。
例子:
go build main.go
Go 編譯器最有用的功能之一是能夠非常輕鬆地執行交叉編譯。您所要做的就是設定 GOOS 和 GOARCH 環境變數以針對所需的平台。
例子:
GOOS=windows GOARCH=amd64 go build main.go
這將為 amd64 架構下的 Windows 建立可執行檔。
Go mod 來得有點晚,因為它是在 Go 1.11 中引入的,但它是一個內建的依賴管理系統。在此之前,我們必須將所有 Go 項目放入機器上名為 {$GOPATH} 的專用目錄中。雖然它有效,但 Go mod 現在為我們提供了更大的靈活性,這很棒!
用法非常簡單,就像 Go 中的所有內容一樣。
你可以透過使用建置標籤來新增條件編譯,但在我看來,最有趣的功能是 Go 自動快取建置輸出以加速後續建置(當然,如果需要,你可以清理快取)。
嵌入資源
如果您想將靜態檔案包含在二進位檔案中,則可以使用 //go:embed 指令。
種族檢測
Go 在並行性方面非常棒。借助其 goroutine 系統以及它們之間進行通訊的通道,開發人員可以輕鬆地將軟體的工作負載分配到不同的核心上。但也很容易把事情搞砸並製造“競賽”。
當兩個 goroutine 同時存取同一個變數且至少其中一次存取是寫入時,就會發生資料競爭。有關詳細信息,請參閱 Go 內存模型。
Go編譯器可以幫你找到它們!
使用競爭標誌來偵測競爭條件:
go build -race main.go
分析與最佳化
我喜歡 Go 的主要事情之一是它的性能。這種語言不需要太多努力就能給出可靠的結果。但如果您想更進一步,Go 生態系統也為您提供了一些非常出色的工具來衡量效能和優化程式碼。
我不會詳細介紹,但如果您想深入了解主題,我邀請您閱讀這篇文章:https://www.practical-go-lessons.com/chap-34-benchmarks
自訂建置模式
有時,您不是在建立軟體,而是在建立插件或庫等。 Go 團隊為您提供支援。在Go中,你可以定義buildmode來得到你想要的結果!
正如您所看到的,Go 在其編譯器和生態系統中提供了許多功能,以允許開發人員充分利用 Go 技術。
今天就是這樣。我將在本週發布另一篇文章,展示 TypeScript 的建置技術,所以如果您想確保不要錯過,請訂閱或關注!
在那之前,祝您編碼愉快!
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3