Golang install

開始要來練習 Golang 了, 所以照舊順便記錄過程

Golang 版本管理

官網有用 tar 的安裝步驟, 但是還有個 Go Version Manager (gvm) 可以管理版本喔, 就照著講師範例來做囉

先安裝工具

1
2
sudo apt install -y curl
sudo apt-get install -y git

再裝 GVM

1
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)

安裝完需要重開終端機

1
2
3
4
5
6
7
samchu@samchu-VirtualBox:~$ bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
Cloning from https://github.com/moovweb/gvm.git to /home/samchu/.gvm
No existing Go versions detected
Installed GVM v1.0.22

Please restart your terminal session or to get started right away run
`source /home/samchu/.gvm/scripts/gvm`

重開後雖然可以用, 但還缺一些 C 的元件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
samchu@samchu-VirtualBox:~$ gvm list

Could not find bison

linux: apt-get install bison

Could not find gcc

linux: apt-get install gcc

Could not find make

linux: apt-get install make

ERROR: Missing requirements.

都裝完後 gvm 指令就正常啦

1
2
3
samchu@samchu-VirtualBox:~$ gvm list

gvm gos (installed)

安裝 Golang

查看可安裝版本

1
gvm listall

選擇安裝版本
A Note on Compiling Go 1.5+ 這一段要特別看一下
因為 1.5 以後的編譯, 都是靠 go 來自己編譯, 所以你必須先裝 go, 所以須先裝以前版本的 go 才能裝新版的

1
2
3
4
5
6
7
8
9
10
$ gvm install go1.4 -B

$ gvm use go1.4

$ export GOROOT_BOOTSTRAP=$GOROOT

$ gvm install go1.12.7
Installing go1.12.7...
* Compiling...
go1.12.7 successfully installed!

切換使用的版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ gvm list

gvm gos (installed)

go1.12.7
=> go1.4

$ gvm use go1.12.7
Now using version go1.12.7

$ gvm list

gvm gos (installed)

=> go1.12.7
go1.4

設定成預設版本

1
2
$ gvm use go1.12.7 --default
Now using version go1.12.7

查看環境變數

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ go env
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/samchu/.cache/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/samchu/.gvm/pkgsets/go1.12.7/global"
GOPROXY=""
GORACE=""
.
.
.

在 vscode 使用 golang

在 MarketPlace 搜尋 go 並安裝擴充套件
https://i.imgur.com/QBbJ3GX.png

安裝完後配置這些屬性
https://i.imgur.com/6bT6pfP.png
https://i.imgur.com/NKwywHh.png
可以從 go env 查到

1
2
3
4
5
{
"go.goroot": "/home/samchu/.gvm/gos/go1.12.7",
"go.gopath": "/home/samchu/.gvm/pkgsets/go1.12.7/global",
"go.formatTool": "gofmt"
}

goroot => Go 安裝的資料夾
gopath => 工作目錄
formatTool => 格式化工具

資料夾結構

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
bin/
hello # 打包好的執行檔
outyet # command executable
src/
github.com/golang/example/
.git/ # Git repository metadata
hello/
hello.go # command source
outyet/
main.go # command source
main_test.go # test source
stringutil/
reverse.go # package source
reverse_test.go # test source
golang.org/x/image/
.git/ # Git repository metadata
bmp/
reader.go # package source
writer.go # package source
... (many more repositories and packages omitted) ...

編寫第一支程式

1
2
3
4
5
6
7
8
9
10
11
12
$ mkdir -p $GOPATH/src/github.com/user
$ mkdir $GOPATH/src/github.com/user/hello

$ cat << 'EOF' > $GOPATH/src/github.com/user/hello/hello.go
package main

import "fmt"

func main() {
fmt.Println("Hello, world.")
}
EOF

build and install that program with the go tool
如果你專案是在 GOPATH 下面的話, 你可以直接執行, 他都可以找到專案

1
$ go install github.com/user/hello

如果不是的話, 就需要手動切換到相對資料夾了

1
2
$ cd $GOPATH/src/github.com/user/hello
$ go install

run the program by typing its full path at the command line

1
2
$ $GOPATH/bin/hello
Hello, world.

或是你要直接執行也是可以

1
2
$ go run $GOPATH/src/github.com/user/hello/hello.go
Hello, world.

目前的資料夾結構

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ tree $GOPATH
.
├── bin
│   └── hello
├── overlay
│   ├── bin
│   └── lib
│   └── pkgconfig
└── src
└── github.com
└── user
└── hello
└── hello.go

9 directories, 2 files

References

Udemy - Go 語言基礎實戰 (開發, 測試及部署)
How to Write Go Code

創用 CC 授權條款
SAM的程式筆記 朱尚禮製作,以創用CC 姓名標示-非商業性-相同方式分享 4.0 國際 授權條款釋出。