在GO要怎麼去使用別人寫好的套件呢,其實很簡單
只要在terminal底下使用go get github上的套件路徑就行了
我用下載json套件為例子 https://github.com/buger/jsonparser
go get github.com/buger/jsonparser
執行完後可以進原本設定的GOPATH的路徑底下去看
bin/
pkg/
src/
github.com/
buger/jsonparser
是被下載到src底下的github.com目錄底下
下載完成後我要怎麼去使用這個套件呢~~
基本上有二種方法
1.先import套件路徑,再直接使用套件的function或是物件
2.直接在程式中使用套件的function或是物件,按下存檔後,go會自動幫你加上import
如果上面動作作完,發現程式沒有import套件進來表示就是套件沒安裝好
package main
//這路徑是對應到src底下
import "github.com/buger/jsonparser"
func main() {
data := []byte(`{
"person": {
"name": {
"first": "Leonid",
"last": "Bugaev",
"fullName": "Leonid Bugaev"
},
"github": {
"handle": "buger",
"followers": 109
},
"avatars": [
{ "url": "https://avatars1.githubusercontent.com/u/14009?v=3&s=460", "type": "thumbnail" }
]
},
"company": {
"name": "Acme"
}
}`)
//因為我有import jsonparser套件,所以我可以直接打出jsonparser.Get的function
jsonparser.Get(data, "person", "name", "fullName")
}
如果套件來源非公開repo,可能是私人自建的Gitlab, Gitea, Gogs等server時,要使用 --insecure語法進行下載,不然會噴錯誤,因為預設的go get是使用https。
go get gitea.xxx/xxx
unrecognized import path "gitea.xxx/xxx": https fetch: Get "https://gitea.xxx/xxx?go-get=1": dial tcp 123.123.123.123:433: connect: operation timed out
Golang 在 1.11 推出了 Go Module功能,因為沒有參與過沒有go module的版本,所以僅能說明用go module的情形。
1.開啟terminal,進入project路徑底下進行初始化go module動作
go mod init
執行完之後你會發現project的根目錄底下會產生一個go.mod,裡面放的這個project所用到的套件
module github.com/youngderekm/grpc-cookies-example
require (
github.com/golang/protobuf v1.2.0
github.com/gorilla/handlers v1.4.0
github.com/gorilla/mux v1.6.2
github.com/gorilla/sessions v1.1.3
github.com/grpc-ecosystem/grpc-gateway v1.5.1
github.com/romana/rlog v0.0.0-20171115192701-f018bc92e7d7
golang.org/x/net v0.0.0-20181102091132-c10e9556a7bc
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e // indirect
google.golang.org/genproto v0.0.0-20180831171423-11092d34479b
google.golang.org/grpc v1.16.0
)
2.在go build project之前執行go mod vendor,產生vendor資料夾並將ref到的套件下載到vendor裡面,
這樣子project執行時第一優先引用vendor裡面的套件,最後會產生go.sum的檔案,
關於go.sum的介紹可以看這文篇 https://studygolang.com/articles/25658
go mod vendor
3.因為使用go mod vendor後,會把用到的套件下載下來,當某套件已經移除沒在用時,這套件還是依然會好好的活在vendor裡面,如果想要移除這些僵屍套件的話,可以使用go mod tidy進行移除
go mod tidy