這是《Go語言簡易入門》系列内容第5篇,所有内容清單見:https://yishulun.com/books/go-easy/目錄.html
設定環境變量$GOPATH、$PATH
從官網(
https://golang.org/dl/
,國内可以從
https://studygolang.com/dl
下載下傳)下載下傳了Go語言安裝包,并安裝以後,此時在終端裡執行指令:
go version
複制
一般都可以顯示版本号了。此時編寫一個簡單的go語言檔案,也可以運作。
但此時Go語言完全運作所需的環境變量還沒有完全準備就緒。一般我們在環境變量中,還需要設定一個名稱為GOPATH的使用者變量或系統變量,同時還需要将GOPATH/bin添加到變量PATH的路徑中。
在macOS上,我們可以在~/.bash_profile中設定使用者變量,也可以在/etc/profile中設定系統變量。在Windows上,我們可以通過計算機屬性->進階屬性->設定變量進行設定。
$PATH路徑的設定與之同理。
為什麼要設定環境變量?
GOPATH變量不設定,不影響運作,它在Go語言安裝包預設安裝後有一個~/go的預設位址,但GOPATH/bin必須添加到PATH的路徑中。這是所有開發者自安裝的Go語言第三方類庫所生成的工具指令,在系統上能夠被查到的基礎,如果不設定,系統不知道去哪裡查找我們在終端裡随意寫出的指令名稱。
舉個例子,gin是一個Go語言編寫的為Go程式提供熱編譯功能的工具。在使用它的時候,我們首先需要安裝它:
go get github.com/codegangsta/gin
複制
然後,假設我們本地有一個main.go,可以這樣執行:
gin run main.go // 啟用熱編譯
複制
此時用gin代替go,運作main.go,當我們修改了後者的代碼以後,gin可以幫助我們自動重新編譯并啟動後者。這是gin的作用。
但是如果我們沒有将GOPATH/bin放在PATH路徑中,上面的gin指令就運作不了,它會提示一個“指令找不到”的錯誤。
go get可以幫助我們自動拉取類庫源碼,及目标類庫所依賴的類庫源碼(放在了GOPATH/src路徑下),并在本地自動編譯,并将編譯生成的本地二進制可執行檔案拷貝到GOPATH/bin路徑下。如果我們不在
如何驗證環境變量?
所有環境變量設定完成以後,怎麼驗證呢?可以在終端裡,可以使用
go env
檢視所有Go語言相關的環境變量了。當然了,也可以單獨使用echo檢視特定的環境變量。如下所示:
go env // 檢視所有go語言環境變量
go version // 檢視版本
echo $PATH | grep /go/bin
echo $GOPATH
複制
補充: go get
指令到底做了哪些事情?
go get
一個
go get
指令在執行後,相當于執行了以下步驟:
- git clone,将所有目标類庫源碼,及目标類庫所依賴的源碼下載下傳到本地
- 開始執行go install,第一步是編譯目标類庫導入的封包件,所有被依賴的封包件被編譯後,才能編譯目标類庫
- 開始編譯目标類庫的主程式,并将編譯之後的可執行檔案,拷貝至$GOPATH/bin目錄下。如果目标類庫是工具,它一定有一個main函數。
在終端裡運作第一個Go程式
既然我們已經了解了如何在終端裡執行額外的指令,接上來我們自己用Go語言寫一個簡單的程式,然後在終端裡執行。
首先我們建立一個檔案:
mkdir -p $GOPATH/rixingyike/first/main.go
複制
并編輯代碼為:
package main
import "fmt"
func main() {
fmt.Printf("hi,ly\n")
}
複制
現在我們執行:
export GO111MODULE=off
go install rixingyike/first
複制
正樣的話現在$GOPATH/bin目錄下已經多了一個名稱為first的二進制可執行檔案。在終端裡可以執行它了:
first // output: hi,ly
複制
在上面我們編譯源碼之前,為什麼要先設定Go環境變量GO111MODULE等于off呢?可以把它設定為on,再試一下。這關系到Go語言的模式化,以下再講。
我講明白沒有,歡迎留言。
2021年1月21日
本文撰寫過程中參考了以下連結,一并緻謝:
- https://blog.csdn.net/qq_34777600/article/details/81319961
- https://go-zh.org/doc/code.html
- https://github.com/codegangsta/gin
本文有視訊,請檢視“程式員LIYI”視訊号的“#Go語言簡易入門”标簽: