帶你學夠浪:Go語言基礎系列-環境配置和 Hello world
阿新 • • 發佈:2020-06-03
> 文章每週持續更新,原創不易,「三連」讓更多人看到是對我最大的肯定。可以微信搜尋公眾號「 後端技術學堂 」第一時間閱讀(一般比部落格早更新一到兩篇)
前面幾周陸陸續續寫了一些後端技術的文章,包括資料庫、微服務、記憶體管理等等,我比較傾向於成體系的學習,所以資料庫和微服務還有後續系列文章補充。
最近工作上比較多的 Golang 程式設計,現在很多網際網路公司都在轉向 Golang 開發,所以打算寫一寫有關 Go 語言學習的系列文章,目標是從 Go 基礎到進階輸出一系列文章,沉澱下這些知識同時也給大家做參考,力求做到通俗易懂,即使你是 `Golang` 小白也能看懂,如果你是老手也能溫故知新。
本文將要和你分享 linux 下安裝 Golang 環境,並且講解如何通過配置 VSCode 遠端開發除錯 Golang 程式。
## 下載原始碼
你可以用系統自帶的包管理工具比如 `yum` 或 `apt-get` 來安裝Golang開發環境。不過,為了通用性,我選擇通過原始碼的方式來安裝和講解,在官網下載原始碼,下載地址 https://golang.org/dl/
![官方下載介面.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy83ODQyNDY0LTdiZDE4ZDMwZDNkOTJiODEucG5n?x-oss-process=image/format,png)
## 手動安裝
### 解壓安裝
我這裡下載下來的原始碼包 `go1.14.2.linux-amd64.tar.gz` 放到遠端 Linux 伺服器目錄下。執行以下命令安裝到 /usr/local 目錄。
```
tar -zxvf -C /usr/local/ `go1.14.2.linux-amd64.tar.gz`
```
### 建立工作空間
工作空間是你Go專案的「工作目錄」,挑選一個合適目錄,執行下面操作:
```shell
mkdir GoPath
mkdir -p GoPath/src
mkdir -p GoPath/bin
mkdir -p GoPath/pkg
```
三個目錄含義:
```css
src: 原始碼路徑(例如:.go、.c、.h、.s 等)
pkg: 編譯包時,生成的.a檔案存放路徑
bin: 編譯生成的可執行檔案路徑
```
### 配置環境變數
安裝過程中有這麼幾個環境變數需要配置,先來了解一下:
GOROOT:Go的安裝路徑,也就是前面我們解壓到的目錄 `/usr/local/go`。
GOBIN:Go專案的二進位制檔案存放目錄。
GOPATH:Go的工作空間。前面有介紹的工作空間目錄。
在 `/etc/profile` 檔案追加以下內容完成設定。
```shell
export GOROOT=/usr/local/go
export GOPATH=/yourpath/GoPath # 設定你自己的GoPath路徑
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOROOT/bin # 加入到PATH環境變數
export PATH=$PATH:$GOPATH/bin
```
```shell
# source /etc/profile #立即生效
```
### 驗證安裝
```shell
# go version #檢查版本
# go version go1.14.2 linux/amd64 # 輸出版本號
```
如果看到版本資訊就代表安裝成功了!
## 遠端開發
上面我們在 Linux 環境下安裝好了 Golang 開發環境,但我不想每次開啟終端登入伺服器編寫除錯程式,怎麼才能在本地PC開發除錯Golang程式呢?
看過我上一篇Vscode遠端開發的小夥伴應該能想到方法,我們就要用Vscode搭建Golang遠端開發環境。具體的遠端開發配置可以檢視我的另一篇文章。
### Golang開發外掛
首先安裝官方推薦的 Go 開發外掛,如下,點他安裝。
![Go外掛](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy83ODQyNDY0LTEwZWRiNmEwODIzZTYzZDUucG5n?x-oss-process=image/format,png)
接著還會出現如下的提示,是因為缺少其他 Go 開發相關外掛,點 `install all` 全都裝上就行。
![安裝所有外掛](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy83ODQyNDY0LTljZGRiYjE0YWY5YTFiNDMucG5n?x-oss-process=image/format,png)
## Hello World
程式設計界有個慣例,什麼語言開始學習都是從 Hello World 開始。現在,我們就用 Golang 編寫第一個 `HelloWorld` 程式吧。
上程式碼:
```go
package main // 所有Go程式從main包開始執行
import "fmt" // 匯入fmt包
func main() {
fmt.Print("hello world", " i am ready to go :)\n")
fmt.Println("hello world", "i am ready to go :)")
}
```
### 格式化 包
`fmt` 實現了類似 C++/C 語言的格式IO庫功能。
`Print` 和 `Println` 都可用於列印輸出,但是功能略有不同。可以看到我在`Print` 函式中,對後一個字串加了空格和換行符,這樣兩個打印出來的結果是相同的。
### Print
```
func Print(a ...interface{}) (n int, err error)
```
Print採用預設格式將其引數格式化並寫入標準輸出。如果兩個相鄰的引數都不是字串,會在它們的輸出之間新增空格。返回寫入的位元組數和遇到的任何錯誤。
### Println
```
func Println(a ...interface{}) (n int, err error)
```
Println採用預設格式將其引數格式化並寫入標準輸出。總是會在相鄰引數的輸出之間新增空格並在輸出結束後新增換行符。返回寫入的位元組數和遇到的任何錯誤。
## 除錯
### 終端除錯
在終端命令列原始碼所在目錄輸入`go run` 執行程式。
```shell
# go run HelloWorld.go
//輸出
hello world i am ready to go :)
hello world i am ready to go :)
```
也可以先編譯`go build` 得到可執行檔案後再執行。
```shell
# go build HelloWorld.go
# ls
HelloWorld HelloWorld.go
# ./HelloWorld
hello world i am ready to go :)
hello world i am ready to go :)
```
### Vscode除錯
按`F5`啟動除錯,編輯與除錯控制檯輸出如下:
![Vscode除錯](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy83ODQyNDY0LTFhNDBlZTFhODZmYjM0ZTIucG5n?x-oss-process=image/format,png)
## 命令列引數獲取
命令列引數可以通過`os` 包的 `Args` 函式獲取,程式碼如下:
```go
package main
import (
"fmt"
"os"
"strconv"
)
func main() {
// 命令列引數獲取,os.Args第一個引數是程式自身
fmt.Println(os.Args)
for idx, args := range os.Args {
fmt.Println("引數"+strconv.Itoa(idx)+":", args)
}
}
```
### 終端設定
以下是帶引數argv1 argv2 執行golang程式和輸出。
```shell
# go run basic.go argv1 argv2
# 輸出
[/tmp/go-build441686724/b001/exe/basic argv1 argv2]
引數0: /tmp/go-build441686724/b001/exe/basic
引數1: argv1
引數2: argv2
```
### VSCode設定
launch.json檔案的 `args` 屬性配置可以設定程式啟動除錯的引數。
![vscode命令列引數設定](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy83ODQyNDY0LWIwMDEzODhhNzAyZWIwOWYucG5n?x-oss-process=image/format,png)
設定之後,按`F5` 啟動除錯,就會在除錯控制檯輸出配置的引數。
![vscode帶引數除錯輸出](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy83ODQyNDY0LTRlM2QxMzJjMzQzMzc4ZmUucG5n?x-oss-process=image/format,png)
## 環境變數獲取
命令列引數可以通過`os` 包的 `Getenv` 函式獲取,程式碼如下:
```go
package main
import (
"fmt"
"os"
)
func main() {
// 獲取環境變數
fmt.Println(os.Getenv("type"), os.Getenv("name"), os.Getenv("GOROOT"))
}
```
### VSCode設定環境變數
`launch.json` 檔案的 `args` 屬性配置可以設定 VSCode 除錯的 Golang 程式環境變數。
設定的格式是:name:vaule 形式,注意都是字串。
![vscode環境變數設定](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy83ODQyNDY0LWNlNWUxY2ZlZWUzOTZhMjQucG5n?x-oss-process=image/format,png)
### 終端設定環境變數
終端的環境變數設定就是可以用 Linux 的 `export` 命令設定,之後就可以用 `os.Getenv` 函式讀取。
比如我們最初設定 `GOROOT` 環境變數的命令
```export GOROOT=/usr/local/go```
就可以用 `os.Getenv("GOROOT") ` 讀取,比較簡單,這裡就不多說了。
## 總結
現在,你有了一個可以遠端開發除錯 Golang 的環境,趕緊去寫個 `hello world` 體驗一下吧!今天的分享就到這,下一篇文章講解基礎語法。
老規矩,感謝各位的閱讀,文章的目的是分享對知識的理解,技術類文章我都會反覆求證以求最大程度保證準確性,若文中出現明顯紕漏也歡迎指出,我們一起在探討中學習。今天的技術分享就到這裡,我們下期再見。
## Reference
[設定GOPATH]( https://studygolang.com/articles/17598 )
[Visual Studio Code變數參考](https://blog.csdn.net/acktomas/article/details/102851702)
[Golang 獲取系統環境變數](https://studygolang.com/articles/3387)
[os庫獲取命令列引數](https://studygolang.com/articles/21438)
**原創不易,不想被白票,如果在我這有收穫,就動動手指「點贊」和「轉發」是對我持續創作的最大支援。**
> 可以微信搜尋公眾號「 後端技術學堂 」回覆「資料」「1024」有我給你準備的各種程式設計學習資料。文章每週持續更新,我們下