## 下載安裝
國內的Go下載站點,根據自己的系統選擇對應的版本進行下載安裝:
```
https://studygolang.com/dl
```
Go的安裝方式除了源碼安裝,其他的都相當簡答,就不過多的贅述了。
## 環境變量
下面介紹下Go語言中需要設置的一些環境變量,具體如何設置這些環境變量,請自行搜索設置方式。
另外系統的不同,設置的方式也不相同。
#### GOROOT
`GOROOT`是Go語言的安裝目錄。
在`Windows`中,`GOROOT`的默認位置是`C:/go`,而在`Mac OS`或者`Linux`中`GOROOT`的默認位置是`/usr/local/go`,如果Go安裝在其他目錄,而需要將`GOROOT`的位置修改為對應的目錄。
另外,`GOROOT/bin`下包含Go為我們提供的工具鏈,因此應該將`GOROOT/bin`配置到環境變量`PYTH`中,方便我們在全局中使用Go的工具鏈。
#### GOPATH
`GOPATH`是Go語言的工作目錄。
`go install/go get`和 go的工具等會用到`GOPATH`環境變量。
`GOPATH`是作為編譯后二進制的存放目的地和import包時的搜索路徑。
`GOPATH`主要包含三個目錄: `bin`、`pkg`、`src`
* bin:主要存放可執行文件。
* pkg:存放編譯好的庫文件, 主要是*.a文件。
* src:下主要存放go的源文件。
此外還需要注意的是不要講`GOROOT`設置城Go語言的路徑,避免出現不必要的沖突。
`GOPATH`可以設置多個工作區,不過當我們使用`go get`命令去獲取遠程庫的時候,一般會安裝到第一個工作區當中。
```
# 每個工作區使用分號,分割即可。
export GOPATH=/opt/go;$home/go
```
#### GOBIN
`GOBIN`是我們在開發程序編譯后二進制命令的安裝目錄。
當我們使用`go install`命令編譯和打包應用程序時,該命令會將編譯后的二進制程序打包`GOBIN`目錄,一般我們將`GOBIN`設置為`GOPATH/bin`。
#### GOOS與GOARCH
`GOOS`與`GOARCH`是當需要進行跨平臺編譯的時候,需要設置的環境變量,這種編譯方式叫做交叉編譯。
所謂的交叉編譯,是指在一個平臺上就生成可以在另外一個平臺上運行的代碼,例如我們可以在32位的Windows操作系統上開發,然后生成可以在64位的Linux操作系統上運行的二進制進程。
* GOOS:它的默認值是我們當前的操作系統,例如Windows、Linux,但是需要注意的是Mac OS的對應值是darwin。
* GOARCH:表示CPU的架構,如386,amd64,arm等。
可以通過`go env`來獲取當前`GOOS`與`GOARCH`的值。
```
$ go env GOOS GOARCH
darwin
amd64
```
`GOOS`與`GOARCH`的取值范圍。
`GOOS`與`GOARCH`的值成對出現,而且只能是下面列表對應的值。
```
GOOS GOARCH
------------------
android arm
darwin 386
darwin amd64
darwin arm
darwin arm64
dragonfly amd64
freebsd 386
freebsd amd64
freebsd arm
linux 386
linux amd64
linux arm
linux arm64
linux ppc64
linux ppc64le
linux mips
linux mipsle
linux mips64
linux mips64le
linux s390x
netbsd 386
netbsd amd64
netbsd arm
openbsd 386
openbsd amd64
openbsd arm
plan9 386
plan9 amd64
solaris amd64
windows 386
windows amd64
```
編譯在64位Linux操作系統上運行的目標程序
```
$ GOOS=linux GOARCH=amd64 go build main.go
```
編譯arm架構Android操作上的目標程序
```
$ GOOS=android GOARCH=arm GOARM=7 go build main.go
```
#### 所有環境變量列表
雖然我們一般雖然配置的環境變量就那么幾個,但其實Go語言是提供了非常多的環境變量,讓我們可以自由地定制開發和編譯器行為。
下面是Go提供的所有的環境變量列表,一般可以劃分為下面幾大類,大概了解一下就可以了,因為有些環境變量我們可以永遠都不會用到。
```
GCCGO
GOARCH
GOBIN
GOCACHE
GOFLAGS
GOOS
GOPATH
GOPROXY
GORACE
GOROOT
GOTMPDIR
```
**和cgo一起使用的環境變量**
```
CC
CGO_ENABLED
CGO_CFLAGS
CGO_CFLAGS_ALLOW
CGO_CFLAGS_DISALLOW
CGO_CPPFLAGS, CGO_CPPFLAGS_ALLOW, CGO_CPPFLAGS_DISALLOW
CGO_CXXFLAGS, CGO_CXXFLAGS_ALLOW, CGO_CXXFLAGS_DISALLOW
CGO_FFLAGS, CGO_FFLAGS_ALLOW, CGO_FFLAGS_DISALLOW
CGO_LDFLAGS, CGO_LDFLAGS_ALLOW, CGO_LDFLAGS_DISALLOW
CXX
PKG_CONFIG
AR
```
**與系統架構體系相關的環境變量**
```
GOARM
GO386
GOMIPS
GOMIPS64
```
**專用的環境變量**
```
GCCGOTOOLDIR
GOROOT_FINAL
GO_EXTLINK_ENABLED
GIT_ALLOW_PROTOCOL
```
**其他環境變量**
```
GOEXE
GOHOSTARCH
GOHOSTOS
GOMOD
GOTOOLDIR
```
## 目錄結構
#### 目前流行的項目結構
```
├── bin # 存放編譯后的二進制文件
├── pkg # 存放編譯后的庫文件
└── src # 存放源碼文件
└── code.fdevops.com # 使用網站域名區分項目
└── lanyulei # 作者/部門/機構...
└── demo1 # 項目
└── main.go
```
## 推薦編輯器
Go采用的是UTF-8編碼的文本文件存放代碼的,理論上使用任何一款文件編輯器都可以做Go語言開發,這里主要推薦兩個開發工具。
#### VS Code
Visual Studio Code(簡稱VS Code)是一個由微軟開發的,同時支持Windows、Linux、和macOS系統且開放源代碼的代碼編輯器,它支持測試,并內置了Git 版本控制功能,同時也具有開發環境功能,例如代碼補全(類似于 IntelliSense)、代碼片段、和代碼重構等,該編輯器支持用戶個性化配置,例如改變主題顏色、鍵盤快捷方式等各種屬性和參數,還在編輯器中內置了擴展程序管理的功能。
雖然不如一些IDE功能強大,但是它添加Go擴展插件后已經足夠勝任我們日常的Go開發工作了,而且它占用資源較少,所以就算配置較低的電腦也可以使用。
#### Goland
喜歡用IDE做開發的同學必定不能錯過Jetbrains家族的IDE,款款精品,可謂都是IDE中的神兵利器。
下面介紹的就是Jetbrains家族中開發Go語言的Goland。
Goland是付費的,當然網上也會有一些激活碼可以直接激活使用,但是個人認為,如果條件允許的話,希望購買正版,若是不愿意付費的話,建議使用VS Code也可滿足正常開發需求。