Go 又稱 Golang ,是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 開(kāi)發(fā)的一種靜態(tài)強(qiáng)類型、編譯型語(yǔ)言。Go 語(yǔ)言語(yǔ)法與 C 相近,但功能上有:內(nèi)存安全,GC(垃圾回收),結(jié)構(gòu)形態(tài)及 CSP-style 并發(fā)計(jì)算。
Go 支持很多主流平臺(tái),例如 Windows 、 Mac 、 Linux 等等。首先需要前往 Go 官網(wǎng)下載相應(yīng)平臺(tái)的二進(jìn)制文件,官網(wǎng)地址為:
https:///
但因?yàn)楸娝苤脑蛟L問(wèn)不了,可以訪問(wèn)下面的地址:
https://www./go/
當(dāng)然也可以到 Go 語(yǔ)言中文網(wǎng)下載,Go 語(yǔ)言中文網(wǎng)下載地址為:
https:///dl
Windows
在 Go 官網(wǎng)下載 MSI
安裝程序。安裝安裝指引程序安裝完成后,會(huì)將 Golang 安裝到 C:\Program Files\Go
目錄下,同時(shí) C:\Program Files\Go\bin
目錄也會(huì)被添加到 PATH
環(huán)境變量中。
我使用的是 Windows 操作系統(tǒng),所以安裝完成后,在 cmd
中使用命令 go version
驗(yàn)證是否安裝成功。如果安裝成功,會(huì)顯示 go 的版本信息,例如:
C:\Users>go version
go version go1.17.2 windows/amd64
Mac OS
在 Go 官網(wǎng)下載 pkg
安裝程序。安裝安裝指引程序安裝完成后,會(huì)將 Golang 安裝到 /usr/local/go
目錄下,同時(shí) /usr/local/go/bin
文件夾也會(huì)被添加到 PATH
環(huán)境變量中。
Linux
在 Go 官網(wǎng)下載 tar.gz
文件,并解壓到 /usr/local
。添加 /usr/local/go/bin
到 PATH
環(huán)境變量中。Go 就已經(jīng)成功安裝在 Linux 上了。
個(gè)人推薦使用 GoLand ,GoLand 是 Jetbrains 家族的 Go 語(yǔ)言 IDE,有 30 天的免費(fèi)試用期。支持系統(tǒng)環(huán)境三大平臺(tái) Mac 、 Linux 和 Windows 。GoLand 下載地址為:
https://www./go/
LiteIDE 是一款開(kāi)源、跨平臺(tái)的輕量級(jí) Go 語(yǔ)言集成開(kāi)發(fā)環(huán)境(IDE)。但只支持 Windows 和 Linux 。LiteIDE 下載地址為:
http:///projects/liteide/files/
當(dāng)然你也可以使用 Visual Studio Code 并安裝相應(yīng)的 Go 擴(kuò)展來(lái)編寫 Go 程序。
接下來(lái),我們就從編寫第一個(gè) Go 程序開(kāi)始,學(xué)習(xí) Go 語(yǔ)言。
首先,在任意目錄下創(chuàng)建一個(gè)目錄 hello 。接著在此目錄下創(chuàng)建一個(gè) hello.go 文件,打開(kāi)文件鍵入下面的代碼,保存并退出。
// hello.go
package main
import "fmt"
func main() {
fmt.Println("Let's go!")
}
首先打開(kāi) cmd 窗口,進(jìn)入存放 hello.go 目錄下(可以直接在文件資源管理器的地址欄輸入 cmd 進(jìn)入),然后使用命令 go build hello.go
編譯 hello.go 程序,編譯完成后,你能在目錄下看到多了一個(gè) hello.exe 可執(zhí)行文件。接著同樣在 cmd 窗口使用命令 hello
運(yùn)行 hello.exe 程序,你會(huì)在 cmd 窗口上看到輸出了字符串 Let's go!
。
C:\Users\hello>go build hello.go
C:\Users\hello>hello
Let's go!
當(dāng)然,你也可以使用 go run hello.go
命令編譯鏈接程序并運(yùn)行,同樣也會(huì)輸出上面的字符串。但是,使用 go run
命令不會(huì)在運(yùn)行目錄下生成任何文件,可執(zhí)行文件被放在臨時(shí)文件中被執(zhí)行,工作目錄被設(shè)置為當(dāng)前目錄。
C:\Users\hello>go run hello.go
Let's go!
// hello.go
package main
import "fmt"
func main() {
fmt.Println("Let's go!")
}
首先,第一行是注釋語(yǔ)句,跟 C 語(yǔ)言一樣,Go 語(yǔ)言也采用 //
和 /* */
作為注釋標(biāo)記。
其次,在第二行指定了該文件屬于 main 包。Go 代碼是使用包來(lái)組織的,包類似于其他語(yǔ)言中的庫(kù)和模塊。一個(gè)包由一個(gè)或多個(gè) .go
源文件組成,放在一個(gè)文件夾中,該文件夾的名字描述了包的作用。每一個(gè)源文件的開(kāi)始都用 package
聲明,上面的例子里面是 package main
,指明了這個(gè)文件屬于 main 包。后面跟著它導(dǎo)入的其他包的列表,然后是存儲(chǔ)在文件中的程序聲明。名為 main
的包比較特殊,它用來(lái)定義一個(gè)獨(dú)立的可執(zhí)行程序,而不是庫(kù)。在 main
包中,函數(shù) main
也是特殊的,不管在什么程序中, main
做什么事情,它總是程序開(kāi)始執(zhí)行的地方。
第四行引入了 fmt 包,因?yàn)槭褂昧?fmt
包中的函數(shù)來(lái)格式化輸出和掃描輸入,所以要在這里導(dǎo)入此包。Println
是 fmt
中一個(gè)基本的輸出函數(shù),它輸出一個(gè)或多個(gè)用空格分隔的值,結(jié)尾使用一個(gè)換行符,這樣看起來(lái)這些值是單行輸出。Go 的標(biāo)準(zhǔn)庫(kù)中有 100 多個(gè)包用來(lái)完成輸入、輸出、排序、文本處理等常規(guī)任務(wù)。在 Go 程序中,我們需要告訴編譯器源文件需要哪些包,用 package
聲明后面的 import
來(lái)導(dǎo)入這些包。我們必須精確地導(dǎo)入需要的包。在缺失導(dǎo)入或存在不需要的包的情況下,編譯都會(huì)失敗,這種嚴(yán)格的要求可以防止程序演化中引用不需要的包。import
聲明必須跟在 package
聲明之后。
第六行我們定義了一個(gè) main 函數(shù),該函數(shù)是一個(gè)特殊的函數(shù),整個(gè)程序從 main 函數(shù)開(kāi)始運(yùn)行。mian 函數(shù)必須放在 main 包中。其中的 {
和 }
分別表示函數(shù)的開(kāi)始和結(jié)束部分。特別注意,在 Go 中不需要在語(yǔ)句或聲明后面使用分號(hào)結(jié)尾,除非有多個(gè)語(yǔ)句或聲明出現(xiàn)在同一行。事實(shí)上,跟在特定符號(hào)后面的換行符被轉(zhuǎn)換為分號(hào),在什么地方進(jìn)行換行會(huì)影響對(duì) Go 代碼的解析。例如, {
符號(hào)必須和關(guān)鍵字 func
在同一行,不能獨(dú)自成行,并且在 x+y
這個(gè)表達(dá)式中,換行符可以在 +
操作符的后面,但是不能在 +
操作符的前面。Go 對(duì)于代碼的格式化要求非常嚴(yán)格。我們可以使用 gofmt
工具將代碼以標(biāo)準(zhǔn)格式重寫, go
工具的 fmt
子命令使用 gofmt
工具來(lái)格式化指定包里的所有文件或者當(dāng)前文件夾中的文件(默認(rèn)情況下)。
第七行我們使用 fmt
包中的 Println
函數(shù)把文本寫入標(biāo)準(zhǔn)輸出。
參考文獻(xiàn):
[1] Alan A. A. Donovan; Brian W. Kernighan, Go 程序設(shè)計(jì)語(yǔ)言, Translated by 李道兵, 高博, 龐向才, 金鑫鑫 and 林齊斌, 機(jī)械工業(yè)出版社, 2017.