Golang入門(1):安裝與配置環境變數的意義

紅雞菌發表於2020-04-05

摘要

在幾年前學習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版本,如圖:

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這個命令,而不需要寫完整的絕對路徑,也是因為他已經被加入了系統的環境變數中:

git絕對路徑

GOPATH

GOPATH也被稱為Golang的工作目錄。它分為兩種,一種是全域性GOPATH,另一種是專案對應的GOPATH,聽起來有點繞,我們下面在進行詳細的解釋。

總的來說,GOPATH是go命令常常需要用到的,如go rungo installgo 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

可以看到,此時的GOPATH為D:\Go_path。然而,如果使用者不進行設定,GOPATH是有一個預設值的:

平臺 GOPATH預設值 舉例
Windows %USERPROFILE%/go C:\Users\使用者名稱\go
Unix $HOME/go /home/使用者名稱/go

也就是說,只需要使用者在需要的地方設定一個目錄,並且將該目錄加到環境變數中,並且名為GOPATH,那麼就可以將這個目錄設定為GOPATH了:

GOPATH設定

注意,有些使用者可能會出現建立了資料夾,也新增了環境變數,但是卻無法修改GOPATH的情況

這是因為只建立了gopath的資料夾,但是這個資料夾裡面不包含srcpkgbin資料夾,所以go無法將這個資料夾識別為GOPATH路徑。

Golang入門(1):安裝與配置環境變數的意義
所以,一定要在你新增的GOPATH路徑中加入這三個資料夾,GOPATH的修改才能生效。

寫在最後

首先,謝謝各位可以看到這裡(鞠躬

作者其實是一個Java開發者,目前也剛剛開始接觸Golang這門年輕的語言,想要通過部落格的形式,一方面更好的消化所學到的知識,另一方面也希望可以將自己的看法與大家分享,大家一起共同進步(奧利給!

當然,因為作者才識疏淺,肯定有很多疏漏或者認識錯誤的地方,如果你在本文中發現了與你認識相違背的地方,或者有哪裡是作者說的比較含糊不夠清晰的地方,請不吝指教交流(再次鞠躬!

最後,再次感謝~

相關文章