初見 Golang

陳奕熹
陳奕熹
Jan 9 · 4 min read

Go語言的設定

## 為什麼會用到 Golang

在 Coursera 上 IBM 開的區塊鏈 hyperledger 應用課程 Lab 3 就是要用 hyperledger fabric 做出一個小應用(雖然是這麼說,但是照理講環境架完,跑一些他準備好的 script 就能動了,重點還是在於 script 裡面在寫什麼)

其中編譯環境需要用到 Go 1.11 版本,python 也是要用 python2.7

其實我在裝 hypervisor composer 的過程中很討厭的部份在於環境設定,首先用到非常多沒有往前相容的工具,導致我們很多時候需要額外下載特定工具版本,就算他有內附 script 來裝這些相依性工具,但是很多時候還是要自己手動調整工具版本,同時有時候用到的工具太多太雜(像有些 script 是透過管理軟體安裝的,有些則是直接去找原始碼編譯的,要做調整的時候就要非常注意)其次做的這些調整很多都是「這個專案的特別需求」,萬一只是做暫時的調整(像是只是在 terminal 把變數 export 出來),之後要從中間開始繼續做的準備成本也會非常大;但是萬一寫在環境設定裡(像是 .bashrc 裡面),那麼萬一之後要準備其他專案環境的時候,整個環境要重新大調整一次,並且之後萬一要繼續弄 hypervisor composer 所需要做的調整又會跟這次做的不一樣真的有點理解為什麼要用 container 或是虛擬機來設定環境了,我目前是利用不同的使用者來管理環境,主要是怕虛擬機拖慢系統效能,不過之後真的要好好學習 Docker 這樣的 container 了

## 什麼是 Golang

關於 Go 語言的介紹在網路上應該蠻常見的,簡略講就是它是由 Google 工程師團隊開發出來的一個語言,有很多高階語言的好處同時也有針對低階語言作到的考量,最神奇的包括 channel 這種類 thread 實做,還有沒記錯它還有指標實做(這真的超神奇,大概只剩 C 有在搞這個了吧)

## 怎麼安裝 Golang

事實上如果你是 Ubuntu 用戶,現在已經可以用一行指令直接把 golang 裝好了

sudo apt-get install golang

或是

sudo snap install go --classic

需要注意的是,上面那個用 apt-get 裝完就是正常在 /usr/bin/go 裡面,但是沒有特別指定的話不會抓最新版;而後面那個會把最新版 go 抓下來,但是會放在 /snap/ 下面,如果要用的話需要特別指定(我目前只有透過 alias go='/snap/go' 來暫時指定)

透過 go env 可以查看環境設定結果,其中需要特別注意的有三點

GOROOT="/usr/local/go"

這邊的 GOROOT 代表的是目前 go 指令事實上對應到的執行檔位置,理論上應該要等於 which go 得到的結果

GOPATH=""

GOPATH 就很重要了,這個代表 Go 語言的工作目錄,所有需要以 Go 語言形式編譯的原始碼都要放這邊,事實上在 go 1.7 以前的版本必須設置這個選項到一個對應的目錄(常見的是 /$HOME/go),不過在 go 1.8 之後的版本再沒有設置的情況下默認為 /$HOME/go

那麼為什麼要有 GOPATH ? 其他的程式語言像是 C 語言不需要專門為原始碼規定一個對應的資料夾阿?

事實上不是所有的 Go原始碼都要放在 GOPATH 裡面,大陸有網友針對這個迷思有寫了一篇文章初探 Go 的编译命令执行过程,主要來說 Go 語言下分成三種檔案,一種是包含 main 的主原始碼,一種是函式庫原始碼,最後一種是測試用的原始碼;後兩種都必須放在 GOPATH 下編譯器才抓的到,但是如果第一種主程式碼並沒有用到其餘函式庫,那麼事實上是可以獨立於 GOPATH 資料夾之外進行編譯執行的
陳奕熹

Written by

陳奕熹

應該要是一個工程師的……

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade