Go基礎語法(一)
什麼是Golang
Go 亦稱為 Golang(譯註:按照 Rob Pike 說法,語言叫做 Go,Golang 只是官方網站的網址),是由谷歌開發的一個開源的編譯型的靜態語言。
Golang 的主要關注點是使得高可用性和可擴充套件性的 Web 應用的開發變得簡便容易。(譯註:Go 的定位是系統程式語言,只是對 Web 開發支援較好)
Go 語言一些優點:
- 併發是語言的一部分(並非通過標準庫實現),所以編寫多執行緒程式會是一件很容易的事。後續教程將會討論到,併發是通過 Goroutines 和 channels 機制實現的。
- Golang 是一種編譯型語言。原始碼會編譯為二進位制機器碼。而在解釋型語言中沒有這個過程,如 Nodejs 中的 Python。
- 語言規範十分簡潔。所有規範都在一個頁面展示,你甚至都可以用它來編寫你自己的編譯器呢。
- Go 編譯器支援靜態連結。所有 Go 程式碼都可以靜態連結為一個大的二進位制檔案(譯註:相對現在的磁碟空間,其實根本不大),並可以輕鬆部署到雲伺服器,而不必擔心各種依賴性。
安裝
Mac OS
官網下載 ofollow,noindex">https://golang.org/dl/ 安裝程式。雙擊開始安裝,會將 Golang 安裝到 /usr/local/go
目錄下,同時 /usr/local/go/bin
資料夾也會被新增到 PATH
環境變數中。
(這裡只介紹Mac OS下的安裝,其他平臺請自行查閱)
建立工作區
在 Mac 或 Linux 作業系統下,Go 工作區應該設定在 $HOME/go
。所以我們要在 $HOME
目錄下建立 go 目錄。
也可以通過設定 GOPATH ,用其他目錄來作為工作區。我這邊使用的ide是這個

image.png
設定GOPATH的方式:

image.png
所有 Go 原始檔都應該放置在工作區裡的 src 目錄下。請在剛新增的 go 目錄下面建立目錄 src。
所有 Go 專案都應該依次在 src 裡面設定自己的子目錄。我們在 src 裡面建立一個目錄 hello 來放置整個 hello 專案。
建立上述目錄之後,其目錄結構如下:
go src hello hello.go
hello.go中寫入程式碼:
package main import "fmt" func main() { fmt.Println("Hello World") }
-
使用命令go run hello.go名執行:
image.png
- 使用 go install hello 命令
當你輸入 go install hello 時,go 工具會在工作區中搜索 hello 包。接下來它會在工作區的 bin 目錄下,建立一個名為 hello(Windows 下名為 hello.exe)的二進位制檔案。執行 go install hello 後,其目錄結構如下所示:
go bin hello src hello hello.go
程式碼中第一行:
package main ,每一個 Go 檔案都應該在開頭進行 package name 的宣告(譯註:只有可執行程式的包名應當為 main)。包(Packages)用於程式碼的封裝與重用,這裡的包名稱是main。
變數
變數:變數指定了某儲存單元(Memory Location)的名稱,該儲存單元會儲存特定型別的值。在 Go 中,有多種語法用於宣告變數。
package main import ( "fmt" "math" ) func main() { var age int // 變數宣告 fmt.Println("my age is", age) age = 10//變數賦值 fmt.Println("my age is", age) age = 30//變數賦值 fmt.Println("my age is", age) var name string = "allen" // 宣告變數並初始化 fmt.Println("my name is", name) var num = 29 // 可以推斷型別 fmt.Println("my num is", num) var width, height int = 100, 50 // 宣告多個變數 fmt.Println("width is", width, "height is", height) var a, b int //省略初始化,預設值為0 fmt.Println("width is", a, "height is", b) //一個語句中聲名不同型別變數 var ( c= "jie" d= 24 e int ) fmt.Println("my c is", c, ", d is", d, "and e is", e) m, n := "allen", 29 // 簡短宣告 fmt.Println("m name is", m, "n is", n) //變數也可以在執行時進行賦值 q, p := 145.8, 543.8 e1 := math.Min(q, p) fmt.Println("minimum value is ", e1) }
- 宣告單個變數 :var name type
- 宣告變數並初始化 : var name type = initialvalue
- 型別推斷(Type Inference) : 如果變數有初始值,那麼 Go 能夠自動推斷具有初始值的變數的型別。因此,如果變數有初始值,就可以在變數宣告中省略 type。例:var name = initialvalue
- 宣告多個變數 : var name1, name2 type = initialvalue1, initialvalue2。
- 一個語句中宣告不同型別的變數 :
var (
name1 = initialvalue1,
name2 = initialvalue2
) - 簡短宣告 : name := initialvalue,
簡短宣告要求 := 操作符左邊的所有變數都有初始值。
簡短宣告的語法要求 := 操作符的左邊至少有一個變數是尚未宣告的。 - 由於 Go 是強型別(Strongly Typed)語言,因此不允許某一型別的變數賦值為其他型別的值。