Go語言 更多關于Go的知識

2023-02-16 17:40 更新

《Go語言101》中的系列文章主要著墨于Go語法和語義。 更多和Go相關的話題并沒有在《Go語言101》中詳盡解釋。 本文將對這些話題做一個簡單的介紹,并提供一些鏈接供讀者自行探索。

程序性能分析、基準測試、單元測試和模糊測試

我們可以使用Go官方工具鏈中的go test命令來運行單元測試和基準測試。 測試源文件名必須以_test.go結尾。 Go官方工具鏈也支持程序性能分析。 請閱讀下列文章獲取詳情:

gccgo

gccgo是Go核心團隊維護開發(fā)的另一款Go編譯器。 它的主要目的是為了驗證標準編譯器(gc)的正確性。 我們可以在go run、go buildgo install等命令中使用選項-compiler=gccgo來指定使用gccgo編譯器。 此選項需要安裝gccgo軟件包才能起作用。 gccgo命令也可單獨運行。

go/*標準庫包

go/*標準庫包提供Go源文件解析相關的功能。這些庫包對于開發(fā)各種Go源代碼分析工具很有幫助。 請閱讀Go代碼分析這些庫包的文檔來獲取如何使用這些庫包中提供的功能。

系統(tǒng)調(diào)用

我們可以使用syscall標準庫包中的函數(shù)來進行系統(tǒng)調(diào)用。 注意此標準庫包和其它標準庫包不同,它其中的函數(shù)是和具體操作系統(tǒng)相關的。

Go匯編

Go函數(shù)可以使用Go匯編語言來編寫。Go匯編是一種跨平臺(盡管并非100%)的匯編語言。 Go匯編匯編常用來實現(xiàn)一些對性能要求很高的函數(shù)。

更多詳情,請閱讀下列文章:

cgo

通過cgo機制,我們可以在Go代碼中調(diào)用C代碼,或者反之。 請閱讀下列鏈接獲取詳情:

通過C代碼做為橋梁,我們也可以使C++和Go代碼能夠相互調(diào)用。

注意,cgo的使用將給跨平臺Go項目的維護開發(fā)帶來一些麻煩。另外Go和C之間互調(diào)不如Go-Go和C-C調(diào)用高效。

跨平臺編譯

標準Go編譯器支持跨平臺編譯。通過設置GOOSGOARCH兩個環(huán)境變量,我們可以使用go build命令在Linux系統(tǒng)中編譯出Windows和Mac程序,反之亦然。 請閱讀下面的代碼獲取詳情:

特別地,自從G0 1.11,標準Go編譯器開始支持WebAssembly做為一種新的架構。請閱讀此篇維基文章獲取詳情。

編譯器指示(compiler directive)

標準Go編譯器支持若干編譯器指示。 一個編譯器指示以注釋的形式//go:DirectiveName args出現(xiàn)。 比如我們可以使用go:generate編譯器指示來生成代碼; 或者使用Go 1.16版本引入go:embed編譯器指示來內(nèi)嵌數(shù)據(jù)文件。

構建編譯約束/標簽(build constraint/tag)

我們可以使用構建編譯約束(或稱標簽)來讓編譯器選擇性地忽略某些源文件。 選擇標簽可以出現(xiàn)在源代碼文件中的最頂部,也可以出現(xiàn)在源代碼文件名(不包含.go后綴)的結尾(并用下劃線分隔開來)。 注意:Go官方工具鏈1.17引入的新的//go:build指示將逐漸替代// +build構建編譯約束。

更多的編譯模式(build mode)

Go官方工具鏈中的go build命令支持更多的編譯模式。 運行go help buildmode可以列出所有支持的模式,或者查看官方文檔來查看這些模式的解釋說明。 除了最常用的default模式,plugin(插件)模式可能是另一種用的較多的模式。 我們可以使用plugin標準庫包中的函數(shù)來加載和使用Go插件。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號