摘要
在幾年前學習Java的時候,環境的配置就會勸退一部分的初學者。而對於Golang來說,也需要從環境的配置開始學起。這一篇文章將從如何安裝Golang開始講起,隨後將會提到Golang中的環境變數GOROOT和GOPATH的配置以及這兩個環境變數起到什麼樣的效果。
下面開始:
安裝
和其他語言的安裝類似,golang的安裝我們也可以採用三種方式進行,從簡單到複雜依次是通過可執行檔案的安裝、官方二進位制包安裝和原始碼編譯安裝。
我們可以在這裡獲取最新版本的go安裝檔案。
在這裡解釋一下,其實二進位制檔案的安裝和可執行檔案的安裝方式是一樣的,但是在Windows中通過可執行檔案來安裝會自動配置GOROOT環境變數,更加省事而已。
在這裡以Windows為例,其他系統的安裝請檢視官方文件所介紹的安裝方式:
對於Windows使用者,可以選擇MSI安裝程式或ZIP包:
MSI安裝
開啟所下載的MSI檔案,並跟隨提示來安裝Go工具。預設情況下,該安裝程式會將Go發行版放到 C:\Go 中。
此安裝程式應該會將 C:\Go\bin 目錄放到你的 PATH 環境變數中。
完成。
ZIP檔案安裝
下載ZIP檔案並解壓(這裡假設已經解壓到了C:\Go中):
將你的Go根目錄中的 bin 子目錄(例如 C:\Go\bin)新增到你的 PATH 環境變數中,如圖:
測試
在命令列中,輸入
go version
複製程式碼
你將可以看到自己所安裝的go版本,如圖:
環境變數
GOROOT
不知道大家有沒有考慮過一個問題,我們為什麼需要配置環境變數。
環境變數是在作業系統中一個具有特定名字的物件,它包含了一個或者多個應用程式所將使用到的資訊。例如Windows和DOS作業系統中的path環境變數,當要求系統執行一個程式而沒有告訴它程式所在的完整路徑時,系統除了在當前目錄下面尋找此程式外,還應到path中指定的路徑去找。使用者通過設定環境變數,來更好的執行程式。
這是百度百科中對於環境變數的定義,也就是說,環境變數是為了方便我們更好的執行某個程式,加入到系統環境變數中的程式,將可以在命令列中直接執行,而不需要我們用絕對路徑來執行。比如我們在使用golang的過程中,常常用到go get
等;在使用python的過程中,常常用到pip install
等,在使用Git的時候,需要使用git clone
等。用GO舉個例子:
如果我們需要檢視go的版本,我們通常是在命令列中輸入go version
,其實在這裡這行命令的全部內容是:
C:\Go\bin\go.exe version
複製程式碼
也就是說,作業系統會把加入了環境變數的所有程式,建立了一個類似於快捷方式的路徑,使使用者的訪問可以更加的方便快捷。無論是GO語言,還是其他的語言,都是如此,像我們常常使用的git,為什麼我們能直接打git xxx
這個命令,而不需要寫完整的絕對路徑,也是因為他已經被加入了系統的環境變數中:
GOPATH
GOPATH也被稱為Golang的工作目錄。它分為兩種,一種是全域性GOPATH,另一種是專案對應的GOPATH,聽起來有點繞,我們下面在進行詳細的解釋。
總的來說,GOPATH是go命令常常需要用到的,如go run
,go install
, go get
等執行的目標路徑,這些命令所操作的目錄,就是GOPATH。
再說說GOPATH包含了有哪些結構:
.(GOPATH的路徑)
├── bin
├── pkg
└── src
複製程式碼
- src存放的是我們的我們專案的原始碼(比如:.go .c .h .s等)
- pkg編譯時生成的中間檔案(比如:.a)
- bin編譯後生成的可執行檔案
在Golang的專案中,所有的原始碼都是放在/src中,一般的做法是一個目錄一個專案。
也就是說,在開發過程中,如果需要引用到其他的專案,使用import "xxx"
,將會引用到$GOPATH/src/xxx這個專案,我們可以將這裡的src聯想為Java開發中的Maven倉庫,src內是一個個依賴。go get
命令所對應的效果就是給所選擇的專案引入遠端的包,可以理解為引入依賴。而對於某個專案中,若有package main
,則這個go檔案是主檔案,將會被編譯執行。
全域性GOPATH與專案GOPATH
然而,我們都知道,在我們開發Java專案的時候,專案的位置和Maven Repository位置是不同的。而在上面的設定中,顯然我們的專案和我們引入的其他包寫在了一塊,這樣顯得不夠優雅,而且可能會因為引用的錯誤,導致一些編譯時的奇奇怪怪的錯誤。
所以,我們應該為每個專案都設定一個單獨的GOPATH。這樣,專案在引用包的時候,會首先在GOROOT/src
中尋找,例如fmt
輸入輸出包,當無法找到的時候,會尋找PROJECT GOPATH/src
,如果還是無法找到,將會尋找GLOBAL GOPATH/src
,這樣一來,我們就可以將一些通用的包放入全域性目錄中,其餘的自行定義。既保證了專案檔案的整潔,也保證了編譯的正確性。
如何設定/修改GOPATH
對於全域性GOPATH,我們可以用go env
命令檢視當前的全域性GOPATH:
可以看到,此時的GOPATH為
D:\Go_path
。然而,如果使用者不進行設定,GOPATH是有一個預設值的:
平臺 | GOPATH預設值 | 舉例 |
---|---|---|
Windows | %USERPROFILE%/go | C:\Users\使用者名稱\go |
Unix | $HOME/go | /home/使用者名稱/go |
也就是說,只需要使用者在需要的地方設定一個目錄,並且將該目錄加到環境變數中,並且名為GOPATH,那麼就可以將這個目錄設定為GOPATH了:
注意,有些使用者可能會出現建立了資料夾,也新增了環境變數,但是卻無法修改GOPATH的情況
這是因為只建立了gopath的資料夾,但是這個資料夾裡面不包含src
,pkg
,bin
資料夾,所以go無法將這個資料夾識別為GOPATH路徑。
寫在最後
首先,謝謝各位可以看到這裡(鞠躬
作者其實是一個Java開發者,目前也剛剛開始接觸Golang這門年輕的語言,想要通過部落格的形式,一方面更好的消化所學到的知識,另一方面也希望可以將自己的看法與大家分享,大家一起共同進步(奧利給!
當然,因為作者才識疏淺,肯定有很多疏漏或者認識錯誤的地方,如果你在本文中發現了與你認識相違背的地方,或者有哪裡是作者說的比較含糊不夠清晰的地方,請不吝指教交流(再次鞠躬!
最後,再次感謝~