《快學 Go 語言》第 1 課 —— Hello World
Go 語言的 Logo
最初 Go 語言的 Logo 是一隻可愛的土撥鼠,土撥鼠晝伏夜出的習性讓它顯得很有 Geek 範。土撥鼠的行動其實並不敏捷,不過它繁殖能力很強,生長髮育的很快。
到了 2018年,Go 語言重新制定了 Logo,消滅了土撥鼠,取而代之的是純文字。這好像是在告訴使用者 Go 語言不再是一個玩具語言,而是一個嚴肅的高效的正式語言。
不過這個新 Logo 不是很受歡迎,它雖然給人一種快速的感覺,但是也顯得很極為古板。到目前為止,你在 Google 圖片裡搜尋 Golang Logo,鋪天蓋地的還是土撥鼠的形象。
Go 語言「元團隊」
很多著名的計算機語言都是那麼一兩個人業餘時間搗鼓出來的,但是 Go 語言是 Google 養著一幫團隊打造出來的。這個團隊非常豪華,它被稱之為 Go Team,成員之一就有大名鼎鼎的 Unix 作業系統的創造者 Ken Thompson,C 語言就是他和已經過世的李奇一起發明的。
圖中翹著二郎腿的謝頂老頭就是 Ken Thompson,它參與 Go 專案時個人已經處於半退休狀態 —— 年紀大了。有條件的讀者可以看看 Youtube 上 Go Team 的訪談視訊一睹大師們的風采,地址是 https://www.youtube.com/watch?v=sln-gJaURzk。
Hello World
學習任何一門語言的第一步是看它的 Hello World 程式怎麼寫。下面是 Go 語言的 Hello World
package main
import "fmt"
func main() {
fmt.Println("hello world!")
}
這個檔案的名字是 main.go,使用下面的命令執行這個檔案
$ go run main.go
輸出
hello world!
是不是有一種操縱指令碼的感覺,寫完程式碼直接執行,中間的編譯連結過程似乎都省去了。不過 go run 指令只是用來開發除錯用的,在生產環境中程式可不是這樣跑的。在開發完成後,需要將程式編譯成沒有任何依賴的二進位制可執行檔案,扔到伺服器上執行起來。這個編譯成二進位制檔案的指令就是
$ go build main.go
執行完畢後可以看到目錄下多了一個 main 的可執行檔案。執行它可以直接看到輸出結果
$ ./main
hello world!
再強調一遍,這個二進位制可執行檔案是沒有任何依賴的,即使伺服器上沒有 go 環境,它也是可以直接執行的。因為編譯器已經將執行時依賴項都融進了這單一的可執行檔案。這也是 go 語言的特色之處,讓使用者編寫的程式可以輕裝上陣。
我也想執行上面的 Hello World
有很多語言的初學者總要為開發環境發愁,不知道上面的 go 命令哪裡來的,main.go 原始碼檔案該放在哪裡執行。下面我簡單介紹一下 Go 語言開發環境的搭建。使用 Go 語言推薦使用 Mac 和 Linux 環境。搭建環境兩步走,第一步安裝,第二步設定 GOPATH 環境變數。
Mac 環境
使用 Mac 電腦的程式設計師一般都比較 Geek,安裝開發類軟體離不開 brew 命令。
$ brew install go
執行上面這個語句,你也許會等上一段時間,取決於你的網路狀況。不出意外, 執行成功後 Go 語言的完整開發包就已經裝進去了。Mac 會預設安裝在下面的目錄中,目錄的最後一層是 Go 的版本號。目錄裡面包含 Go 的編譯器程式、Go 的標準庫、Go 的原始碼庫和文件。
/usr/local/Cellar/go/1.10.3
安裝程式會自動在 /usr/local/bin 下建立一個軟連線 go 指向 /usr/local/Cellar/go/1.10.3/bin/go 編譯器程式,於是你就可以在命令列裡直接使用 go 命令了。如果你在命令汗裡鍵入 go 命令,有下面這樣的輸出,那就是安裝成功了。
$ go
Go is a tool for managing Go source code.
Usage:
go command [arguments]
...
Linux 環境
Linux 環境的安裝也很簡單,使用下面這條指令在 ubuntu 下可以直接安裝完成
$ apt-get install golang
如果你用的是紅帽子或者 Centos 系統,那就使用下面的等價命令
$ yum install golang
Windows 環境
Windows 使用者很悲催,需要下載 Go 語言的安裝包,這很頭疼,鑑於 Go 語言的官網被牆了,你需要代理穿越過去下載。如果你沒有代理,那就使用搜尋引擎找找非官方的下載包吧。這裡我就不照顧你們了,建議你們使用虛擬機器安裝 Linux 吧。
設定 GOPATH 環境變數
Go 的開發包已經安裝成功了,下面還需要設定一個重要的環境變數,這個環境變數就是 GOPATH,它指向一個目錄,以後我們下載的第三方包和我們自己開發的程式程式碼包都要放在這個目錄裡面,它就是 Go 語言的工作目錄。當你在原始碼裡使用 import 語句匯入一個包時,編譯器都會來 GOPATH 目錄下面尋找這個包。
Mac 和 Linux 使用者的 GOPATH 通常都設定成 ~/go,也就是在 home 目錄下建一個名為 go 的目錄。將下面環境變數的設定命令追加到 ~/.bashrc 或者 ~/.zshrc 的檔案末尾,然後重新開啟命令列即可。
export GOPATH=~/go
在 Go 語言的早期版本中,還需要使用者設定 GOROOT 環境變數。這個 GOROOT 環境變數指代 Go 語言開發包的目錄,是上面提到的 /usr/local/Cellar/go/1.10.3。它類似於 Java 語言裡面的 JAVA_HOME 環境變數。不過後來 Go 取消了這個環境變數的設定,也就是說使用者可以不必再操心這個環境變數了,當它不存在就行。之所以這裡提到它,是擔心讀者在網上看到某些文章時提到這個 GOROOT 變數會感到迷惑不解。
在哪裡寫程式碼?
如果你只是跑一下 demo ,寫一個 main 方法,那麼你可以在任意路徑編寫 main.go 檔案,然後執行 go run main.go 就可以執行程式碼了。如果你要自己編寫一個 package,那麼就必須在 GOPATH 裡面的指定路徑來編寫程式碼。
在基礎學習階段,大部分程式碼都是一個簡單的 main 函式,所以對於原始碼路徑沒有限制。到了高階階段,我們免不了要自己編寫 package,這時候就必須在 GOPATH 目錄下面工作了。
讀者請嘗試在任意目錄下建立 main.go 檔案,將程式碼貼進去。執行 go run main.go 命令觀察輸出結果是否是期望的 hello world!。
用什麼編輯器寫程式碼?
推薦使用 vscode,如果你覺得自己是一個 GEEK,那也可以使用 vim。不過 vscode 也有 vim 外掛,所以還是推薦讀者使用 vscode 。 vscode 的官方網站是 https://code.visualstudio.com/,首頁有一個 Download 按鈕,點進去選擇你需要的安裝包下載安裝吧。 下面是作者使用 vscode 編寫程式碼的截圖,這是預設的 Dark 主題,不知道讀者是否喜歡這個配色方案。不喜歡也沒關係,vscode 提供了很多主題使用者可以自己挑選。
思考題
如果你覺得本節對 GOPATH 環境變數解釋的很淺顯,請使用下面的命令來閱讀 GOPATH 的更多細節,很遺憾,是全英文,而且內容很長。如果你是初學者,還是建議你成為 Go 語言老鳥以後再來閱讀這些細節。
$ go help gopath
內容開頭告訴我們 GOPATH 環境變數也可以不用設定了,因為編譯器提供了預設值,這個預設值就是我們上面提到的 ~/go 目錄。所以 Go 的開發工具是可以直接拿來即用的 —— 零配置。除非你覺得這個目錄不好,想自己換一個,那就必須配置 GOPATH 環境變數了。
閱讀更多精彩文章,歡迎關注公眾號「碼洞」
下一節 我們開始講解 Go 語言的基礎變數型別。
相關文章
- 《快學 Go 語言》第 7 課 —— 字串Go字串
- 《快學 Go 語言》第 6 課 —— 字典Go
- 《快學 Go 語言》第 14 課 —— 反射Go反射
- 《快學 Go 語言》第 12 課 —— 通道Go
- 《快學 Go 語言》第 9 課 —— 介面Go
- 《快學 Go 語言》第 15 課 —— 反射Go反射
- 《快學 Go 語言》第 5 課 —— 神奇的切片Go
- 《快學 Go 語言》第 5 課 —— 靈活的切片Go
- 《快學 Go 語言》第 2 課 —— 變數基礎Go變數
- 《快學 Go 語言》第 3 課 —— 分支與迴圈Go
- 《快學 Go 語言》第 7 課 —— 冰糖葫蘆串Go
- 《快學 Go 語言》第 13 課 —— 併發與安全Go
- 《快學 Go 語言》第 4 課 —— 低調的陣列Go陣列
- 《快學 Go 語言》第 7 課 —— 誘人的烤串Go
- 《快學 Go 語言》第 12 課 —— 神秘的地下通道Go
- 《快學 Go 語言》第 16 課 —— 包管理 GOPATH 和 VendorGo
- 《快學 Go 語言》第 14 課 —— 魔術變性指標Go指標
- C語言列印“Hello World“C語言
- 《快學 Go 語言》第 11 課 —— 千軍萬馬跑協程Go
- Go - Hello WorldGo
- Go:Hello WorldGo
- gRPC-go 入門(1):Hello WorldRPCGo
- 帶你學夠浪:Go語言基礎系列-環境配置和 Hello worldGo
- 《快學 Go 語言》第 8 課 —— 程式大廈是如何構建起來的Go
- 《快學 Go 語言》第 2 課 —— 變數什麼的最討厭了Go變數
- 入門輸出Hello World!——C語言C語言
- [系列] Go gRPC Hello WorldGoRPC
- 使用Golang語言編寫Hello World Web應用GolangWeb
- C# Hello,World(1)
- golang 學習筆記:第 1 節:GO 語言介紹Golang筆記
- Smali 語法解析——Hello World
- Go語言————1、初識GO語言Go
- Go Web 程式設計之 Hello WorldGoWeb程式設計
- Go語言學習(1) - 簡介Go
- React 學習之 Hello WorldReact
- Hello, World
- Hello,World
- Hello World