Go語言環境搭建詳解(2020版)


最近寫了很多Go語言的原創文章,其中Go語言實戰系列30篇,近15W字,還有最近更新的Go經典庫系列,不過通過大家的咨詢來看,還是想要一些入門的知識,這一篇文章寫於2017年初,這3年多Go更新了很多版本,所以需要更新下這篇文章。

提示:本文基於Go語言最新版 go1.15.3 寫成。

有讀者來信(微信公眾號消息)說能不能寫一篇關於Go語言環境的配置搭建,這樣對於想學Go語言的可以快速的配置起來一個環境。這個的確是我忽略了,按照我寫書的邏輯,也是先有環境搭建,才能有語言功能介紹,這個直接把Go語言的開發環境搭建等配置跳過去實在不應該,所以這篇特意針對Go語言的開發環境搭建、配置、編輯器選型、不同平台程序生成等做了詳細的介紹。

下載
要搭建Go語言開發環境,我們第一步要下載go的開發工具包,目前最新穩定版本是go1.15.3。Go為我們所熟知的所有平台架構提供了開發工具包,比如我們熟知的Linux、Mac和Windows,其他的還有FreeBSD等。

我們可以根據自己的機器操作系統選擇相應的開發工具包,比如你的是Windows 64位的,就選擇windows-amd64的工具包;是Linux 32位的就選擇linux-386的工具包。可以自己查看下自己的操作系統,然后選擇,Mac的現在都是64位的,直接選擇就可以了。

開發工具包又分為安裝版和壓縮版。安裝版是Mac和Windows特有的,他們的名字類似於:

go1.15.3.darwin-amd64.pkg
go1.15.3.windows-386.msi
go1.15.3.windows-amd64.msi
安裝版,顧名思義,雙擊打開會出現安裝向導,讓你選擇安裝的路徑,幫你設置好環境比安康等信息,比較省事方便一些。

壓縮版的就是一個壓縮文件,可以解壓得到里面的內容,他們的名字類似於:

go1.15.3.darwin-amd64.tar.gz
go1.15.3.linux-386.tar.gz
go1.15.3.linux-amd64.tar.gz
go1.15.3.windows-386.zip
go1.15.3.windows-amd64.zip
壓縮版我們下載后需要解壓,然后自己移動到要存放的路徑下,並且配置環境變量等信息,相比安裝版來說,比較復雜一些,手動配置的比較多。

根據自己的操作系統選擇后,就可以下載開發工具包了,Go語言的官方下載地址是 https://golang.org/dl/ 可以打開選擇版本下載,如果該頁面打不開,或者打開了下載不了,可以通過Golang的國內網站 https://golang.google.cn/dl/ 下載。

Linux下安裝
我們以Ubuntu 64位為例進行演示,CentOS等其他Linux發行版大同小異。

下載go1.15.3.linux-amd64.tar.gz后,進行解壓,你可以采用自帶的解壓軟件解壓,如果沒有可以在終端行使用tar命令行工具解壓,我們這里選擇的安裝目錄是 /usr/local/go,可以使用如下命令:

1
tar -C /usr/local -xzf go1.15.3.linux-amd64.tar.gz
如果提示沒有權限,在最前面加上sudo以root用戶的身份運行。運行后,在/usr/local/下就可以看到go目錄了。如果是自己用軟件解壓的,可以拷貝到/usr/local/go下,但是要保證你的go文件夾下是bin、src、doc等目錄,不要go文件夾下又是一個go文件夾,這樣就雙重嵌套了。

然后就要配置環境變量了,Linux下又兩個文件可以配置,其中/etc/profile是針對所有用戶都有效的; $HOME/.profile是針對當前用戶有效的,可以根據自己的情況選擇。

針對所有用戶的需要重啟電腦才可以生效;針對當前用戶的,在終端里使用source命令加載這個 $HOME/.profile即可生效。

1
source ~/.profile
使用文本編輯器比如VIM編輯他們中的任意一個文件,在文件的末尾添加如下配置保存即可:

1
2
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
其中GOROOT環境變量表示我們GO的安裝目錄,這樣其他軟件比如我們使用的Go開發IDE就可以自動的找到我們的Go安裝目錄,達到自動配置Go SDK的目的。

第二句配置是把/usr/local/go/bin這個目錄加入到環境變量PATH里,這樣我可以在終端里直接輸入go等常用命令使用了,而不用再加上/usr/local/go/bin這一串絕對路徑,更簡潔方便。

以上配置好之后,我們打開終端,屬於如下命令,就可以看到go的版本等信息了。

1
2
➜ ~ go version
go version go1.15.3 linux/amd64
這就說明我們已經安裝go成功了,如果提示go這個命令找不到,說明我們配置還不對,主要在PATH這個環境變量,仔細檢查,直到可以正常輸出為止。

Mac下安裝
Mac分為壓縮版和安裝版,他們都是64位的。壓縮版和Linux的大同小異,因為Mac和Linux都是基於Unix,終端這一塊基本上是相同的。

壓縮版解壓后,就可以和Linux一樣放到一個目錄下,這里也以/usr/local/go/為例。在配置環境變量的時候,針對所有用戶和Linux是一樣的,都是/etc/profile這個文件;針對當前用戶,Mac下是$HOME/.bash_profile,其他配置都一樣,包括編輯sudo權限和生效方式,最后在終端里測試:

1
2
➜ ~ go version
go version go1.15.3 darwin/amd64
Mac安裝版下載后雙擊可以看到安裝界面,按照提示一步步選擇操作即可。安裝版默認安裝目錄是/usr/local/go,並且也會自動的把/usr/local/go/bin目錄加入到PATH環境變量中,重新打開一個終端,就可以使用go version進行測試了,更快捷方便一些。

Windows下安裝
Windows也有壓縮版和安裝版,又分為32和64位以供選擇,不過目前大家都是64位,選擇這個更好一些。

Window的壓縮版是一個ZIP壓縮包,下載后使用winrar等軟件就可以解壓,解壓后要選擇一個存放目錄,比如c:\Go下,這個c:\Go就是Go的安裝目錄了,他里面有bin、src、doc等目錄。

然后就是環境變量的配置,Window也和Linux一樣分為針對所有用戶的系統變量,和針對當前用戶的用戶變量設置,可以自行選擇,比如系統變量,針對所有用戶都有效。

以Window 7為例,右擊我的電腦->屬性會打開系統控制面板,然后在左側找到高級系統設置點擊打開,會在彈出的界面最下方看到環境變量按鈕,點擊它,就可以看到環境變量配置界面了。上半部分是用戶變量配置,下半部分是系統變量配置。

我們在系統變量里點擊新建,變量名輸入GOROOT,變量值是我們剛剛安裝的go路徑c:\Go,這樣就配置好了GO目錄的安裝路徑了。

然后修改PATH系統變量,在變量值里添加%%GOROOT\bin路徑,和其他PATH變量以;(分號,Linux下是冒號)分割即可。這樣我們就可以在CMD里直接輸入go命令使用了。

打開我們的終端,輸入go version測試下,好了的話就可以看到輸出的信息了。

Window的安裝版相比來說就比較簡單一些,雙擊就可以按照提示一步步安裝,默認安裝路徑是c:\Go,並且會配置好PATH環境變量,可以直接打開CMD終端使用。

GOPATH目錄
自動Golang采用Module的方式管理項目后,GOPATH目錄已經不是那么重要了,目前主要用來存放依賴的Module庫,生成的可執行文件等。GOPATH環境變量的配置參考上面的安裝Go,配置到/etc/profile或者Windows下的系統變量里。

這個目錄我們可以根據自己的設置指定,比如我的Mac在$HOME/code/go下,Window的可以放到d:\code\go下等。該目錄下有3個子目錄,他們分別是:

1
2
3
4
.
├── bin
├── pkg
└── src
bin文件夾存放go install命名生成的可執行文件,可以把
G
O
P
A
T
H
/
b
i
n





P
A
T
H















GOROOT/bin一樣,這樣就可以直接在終端里使用我們go開發生成的程序了。
pkg文件夾是存在go編譯生成的文件。
src存放的是非Go Module項目源代碼。
go項目工程結構
配置好工作環境后,就可以編碼開發了,在這之前,我們看下go的通用項目結構,這里的結構主要是源代碼相應地資源文件存放目錄結構。

基於Go Module,你可以在任意位置創建一個Go項目,而不再像以前一樣局限在$GOPATH/src目錄下。假設我要創建一個tour項目,它位於/Desktop/tour目錄下,那我現在打開終端,CD到/Desktop/tour目錄下,輸入如下命令即可創建一個Go Module工程。

1
2
➜ tour go mod init flysnow.org/tour
go: creating new go.mod: module flysnow.org/tour
當前生成的Go Module工程只有一個go.mod文件,它的內容如下所示:

1
2
3
module flysnow.org/tour

go 1.15
其中module flysnow.org/tour代表該項目的path,也就是最頂層的package,go 1.15表示該項目需要go 1.15版本及其以上才能編譯運行。

go.mod文件是Go語言工具鏈用於管理Go語言項目的一個配置文件,我們不用手動修改它,Go語言的工具鏈會幫我們自動更新,比如當我們的項目添加一個新的第三方庫的時候。

使用第三方庫,也就是使用第三方庫里的包,那么我們如何引用一個包呢,使用的就是go語言的import關鍵字,比如:

1
2
3
import (
"github.com/gohugoio/hugo/commands"
)
以上引入的github.com/gohugoio/hugo/commands這個包是屬於 github.com/gohugoio/hugo/這個Go Module的。

所以相應的,我們也可以在我們自己的Go Module工程里創建一些包(其實就是子目錄),比如我創建了lib1目錄,那么它的對應的包就是flysnow.org/tour/lib1,其他包只有通過這個包名才能使用flysnow.org/tour/lib1包中的函數方法等。

1
2
3
4
5
.
├── go.mod
├── lib1
├── lib2
└── main.go
所以最后你的項目目錄類似上面的結構,每個子目錄都是一個包,子目錄里可以放go文件。

Hello World
好了,有了tour項目,就可以演示下Go語言版本的Hello World了,在tour根目錄下的main.go(如沒有這個文件,就新建一個)文件中,添加如下Go代碼。

1
2
3
4
5
6
7
8
9
10
package main

import (
"fmt"
)

func main() {
fmt.Println("Hello World")
}

Go版Hello World非常簡單。在~/Desktop/tour目錄下運行go run main.go命令就可以看到打印的輸出Hello World,下面解釋下這段代碼。

1.package 是一個關鍵字,定義一個包,和Java里的package一樣,也是模塊化的關鍵。 2. main包是一個特殊的包名,它表示當前是一個可執行程序,而不是一個庫。 3. import 也是一個關鍵字,表示要引入的包,和Java的import關鍵字一樣,引入后才可以使用它。 4. fmt是一個包名,這里表示要引入fmt這個包,這樣我們就可以使用它的函數了。 5. main函數是主函數,表示程序執行的入口,Java也有同名函數,但是多了一個String[]類型的參數。 6. Println是fmt包里的函數,和Java里的system.out.println作用類似,這里輸出一段文字。

整段代碼非常簡潔,關鍵字、函數、包等和Java非常相似,不過注意,go是不需要以;(分號)結尾的。

安裝程序
安裝的意思,就是生成可執行的程序,以供我們使用,為此go為我們提供了很方便的install命令,可以快速的把我們的程序安裝到$GOAPTH/bin目錄下。在~/Desktop/tour目錄下運行如下代碼即可安裝。

1
➜ go install flysnow.org/tour
打開終端,運行上面的命令即可,install后跟全路徑的包名。 然后我們在終端里運行tour就看到打印的Hello World了。

1
2
➜ ~ tour
Hell World
跨平台編譯
以前運行和安裝,都是默認根據我們當前的機器生成的可執行文件,比如你的是Linux 64位,就會生成Linux 64位下的可執行文件,比如我的Mac,可以使用go env查看編譯環境,以下截取重要的部分。

1
2
3
4
5
6
7
8
➜ ~ go env
GOARCH="amd64"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
注意里面兩個重要的環境變量GOOS和GOARCH,其中GOOS指的是目標操作系統,它的可用值為:

aix
android
darwin
dragonfly
freebsd
illumos
js
linux
netbsd
openbsd
plan9
solaris
windows
一共支持13種操作系統。GOARCH指的是目標處理器的架構,目前支持的有:

arm
arm64
386
amd64
ppc64
ppc64le
mips
mipsle
mips64
mips64le
s390x
wasm
一共支持12種處理器的架構,GOOS和GOARCH組合起來,支持生成的可執行程序種類很多,具體組合參考https://golang.org/doc/install/source#environment。如果我們要生成不同平台架構的可執行程序,只要改變這兩個環境變量就可以了,比如要生成linux 64位的程序,命令如下:

1
GOOS=linux GOARCH=amd64 go build flysnow.org/tour
前面兩個賦值,是更改環境變量,這樣的好處是只針對本次運行有效,不會更改我們默認的配置。

獲取遠程包
因為眾所周知的原因,在獲取遠程包之前,我們需要先配置的代理,這里推薦goproxy.io代理,設置命令如下:

1
2
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.io,direct
設置好代理后,就可以使用go提供的一個獲取遠程包的工具go get來獲取遠程包了,它需要一個完整的包名作為參數,只要這個完整的包名是可訪問的,就可以被獲取到,比如我們獲取一個CLI的開源庫:

1
go get -v github.com/spf13/cobra
就可以下載這個庫到我們$GOPATH/pkg/mod目錄下了,這樣我們就可以像導入其他包一樣import了。

特別提醒,go get的本質是使用源代碼控制工具下載這些庫的源代碼,比如git,hg等,所以在使用之前必須確保安裝了這些源代碼版本控制工具。

如果我們使用的遠程包有更新,我們可以使用如下命令進行更新,多了一個-u標識。

1
go get -u -v github.com/spf13/cobra
獲取gitlab私有庫包
如果是私有的git庫怎么獲取呢?比如在公司使用gitlab搭建的git倉庫,設置的都是private權限的。這種情況下我們可以配置下git,就可以了,在此之前你公司使用的gitlab必須要在7.8之上。然后要把我們http協議獲取的方式換成ssh,假設你要獲取http://git.flysnow.org,對應的ssh地址為git@git.flysnow.org,那么要在終端執行如下命令。

1
git config --global url."git@git.flysnow.org:".insteadOf "http://git.flysnow.org/"
這段配置的意思就是,當我們使用http://git.flysnow.org/獲取git庫代碼的時候,實際上使用的是git@git.flysnow.org這個url地址獲取的,也就是http到ssh協議的轉換,是自動的,他其實就是在我們的~/.gitconfig配置文件中,增加了如下配置:

1
2
[url "git@git.flysnow.org:"]
insteadOf = http://git.flysnow.org/
然后需要把git.flysnow.org加入GOPRIVATE環境變量中,因為它是你的私有倉庫,不需要走GOPROXY代理。

1
2

設置不走 proxy 的私有倉庫,多個用逗號相隔(可選)

go env -w GOPRIVATE=git.flysnow.org
現在我們就可以使用go get直接獲取了,比如:

1
go get -v -insecure git.flysnow.org/hello
仔細看,多了一個-insecure標識,因為我們使用的是http協議, 是不安全的。當然如果你自己搭建的gitlab支持https協議,就不用加-insecure了,同時把上面的url insteadOf換成https的就可以了。

Go還有很多命令行工具可以使用,更多的請參考Go語言實戰筆記(二)| Go開發工具

Go編輯器推薦
Go采用的是UTF-8的文本文件存放源代碼,所以原則上你可以使用任何一款文本編輯器,這里推薦幾款比較流行的。

對於新手來說,我推薦功能強大的IDE,功能強大,使用方便,比如jetbrains idea+golang插件,上手容易,而且它家的IDE都一樣,會一個都會了,包括菜單、快捷鍵等。

值得高興的是jetbrains針對Go這門語言推出了專用IDE goland,也足以證明go的流行以及jetbrains的重視。goland地址為 https://www.jetbrains.com/go/,可以前往下載使用。

其次可以推薦微軟的VS Code,這款編輯器插件強大,快捷鍵方便,對Go支持的很好,也擁有大量的粉絲。

編輯器只是為了提高開發效率,大家哪個順手用哪個,不存在誰更NB。

一些文章推薦
一個就是我的GO語言實戰筆記系列,這個可以入門和深入,還有最近寫的Go的第三方庫介紹和分析,可以讓我們快速上手以及了解原理實踐。

Go語言實戰筆記(一)| Go包管理
Go語言實戰筆記(二)| Go開發工具
Go語言實戰筆記(四)| Go 數組
Go語言實戰筆記(六)| Go Map
Go語言實戰筆記(九)| Go 接口
Go語言實戰筆記(十二)| Go goroutine
Go語言實戰筆記(二十六)| Go unsafe 包之內存布局
Go語言經典庫使用分析(五)| Negroni 中間件(一)
此外,關於Go學習的書等,我這里有一篇知乎比較高的回答,供大家參考系統學習GO,推薦幾本靠譜的書?

到這里,整個Go開發環境就詳細介紹完了,不光有環境安裝搭建,還有目錄結構、常用命令使用等都進行了介紹,這篇文章看完后,已經入門了Go了,剩下的再看看Go的語法和庫,就可以很流暢的編寫Go程序了。

from:https://www.flysnow.org/2020/11/03/install-golang.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM