第一隻Go程式
- 系列:下班加減學點Golang與Docker系列 第 2 篇
- Day:2
- 發佈時間:2019-09-09 00:03:54
- 原文:https://ithelp.ithome.com.tw/articles/10214347
安裝Go跟開發環境
Install the GO on Linux
# Download file
wget https://dl.google.com/go/go1.12.7.linux-amd64.tar.gz
# Extract it into /usr/local
tar -C /usr/local -xzf go1.12.7.linux-amd64.tar.gz
# Add /usr/local/go/bin to the Path environment variable
export PATH=$PATH:/usr/local/go/bin
# Check installation
go env

其他名稱會在後面講package時會稍微提到.
Upgrade Go
# Download file
wget https://dl.google.com/go/go$VERSION.linux-amd64.tar.gz
# Extract it into /usr/local
tar -C /usr/local -xzf go$VERSION.linux-amd64.tar.gz
# Add /usr/local/go/bin to the Path environment variable
export PATH=$PATH:/usr/local/go/bin
Upgrade by shell script
Workspaces
Workspaces
Setting GoPath
在GoPath所顯示的目錄下創建以下資料夾
- src : go source file
- pkg : 編譯產生的文件, .a檔案(一包object file) ; 暫態緩存文件
- bin : 編譯後可執行檔案
mkdir -p $GOPATH/src $GOPATH/pkg $GOPATH/bin
Hello Go
mkdir -p $GOPATH/src/hello
cd $GOPATH/src/hello
code .
以VsCode開啟該目錄
package main
import "fmt"
func main() {
fmt.Println("Hello Go")
}
# 編譯產生可執行的二進制檔案, 會被安裝到$GOPATH/bin底下
go install hello
# 執行
$GOPATH/bin/hello
> Hello Go
Main package
Go每支檔案都會需要宣告這是屬於哪個package的, 相當於C#的namespace概念.
主要的會有一個叫做main的package包, 做為這隻可執行程式的入口包.
如果該專案沒有main包時, 就沒法被編譯成可執行檔案.
所以如果是要做成共享套件, 就可以不必有main包的存在於該專案內.
main裡面會有main方法作為程式的執行進入點.
// main包宣告
package main
// 匯入fmt包
import (
"fmt"
)
// main 方法, 作為執行程式的入口
func main() {
fmt.Println("Hello IThome")
}
import
用來導入其他的包, 要用雙引號作為字串來使用.
- 單行匯入
import "包A"
import "包B"
- 多行匯入, 宣告順序不影響真正的匯入結果
import (
"包A"
"包B"
)
要是我有一個包在$GOPATH/src/底下的資料夾路徑是這樣的
- github.com
- ithome
- packageA
那我要引入 packageA的話要按照$GOPATH開始計算的路徑, 使用/進行路徑分隔.
也因為跟資料夾路徑有關, 所以建議上都是把資料夾名稱跟package名稱取名成一致.
- packageA
- ithome
import (
"github.com/ithome/packageA"
)
安裝第三方套件
今天想安裝mysql套件, 他的遠端路徑是 github.com/go-sql-driver/mysql
依照 /作路徑分隔的話.
第一段表示網域名稱
第二段表示作者或者是機構名稱
第三段則是專案名稱
透過go get指令, 透過這指令下載原始碼並且編譯.
由於go get需要GOPATH已經被設置, Go1.8之後GOPATH預設在用戶目錄的go資料夾下.
go get github.com/go-sql-driver/mysql
go get 參數說明:
- -d 只有下載, 不會安裝
- -v verbose, 顯示下載編譯時的log
- -u 更新既有的依賴包
有了基本包的概念, 就能寫簡單的範例了.
# 安裝logrus這log套件
go get github.com/sirupsen/logrus
go/src/packagedemo/mylib/add.go
package mylib
func Add(a, b int) int {
return a + b
}
go/src/packageDemo/main.go
package main
import (
"fmt"
"packagedemo/mylib"
// 這裡使用log 這別名來取代logrus這包名
log "github.com/sirupsen/logrus"
)
func main() {
fmt.Println(mylib.Add(1,2))
log.Info("IThome Iron man")
}
執行
go run main.go
# 輸出 :
# 3
# INFO[0000] IThome Iron man