Go語言 更多關(guān)于Go的知識(shí)

2023-02-16 17:40 更新

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

程序性能分析、基準(zhǔn)測試、單元測試和模糊測試

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

gccgo

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

go/*標(biāo)準(zhǔn)庫包

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

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

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

Go匯編

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

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

cgo

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

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

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

跨平臺(tái)編譯

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

特別地,自從G0 1.11,標(biāo)準(zhǔn)Go編譯器開始支持WebAssembly做為一種新的架構(gòu)。請閱讀此篇維基文章獲取詳情。

編譯器指示(compiler directive)

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

構(gòu)建編譯約束/標(biāo)簽(build constraint/tag)

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

更多的編譯模式(build mode)

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


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號