iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 13
0

在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

Go Module

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

https://ithelp.ithome.com.tw/upload/images/20200921/20129515cdftswXJq1.png

3.因為使用go mod vendor後,會把用到的套件下載下來,當某套件已經移除沒在用時,這套件還是依然會好好的活在vendor裡面,如果想要移除這些僵屍套件的話,可以使用go mod tidy進行移除

go mod tidy

上一篇
[DAY12]GO要怎麼處理錯誤呢
下一篇
[DAY14]動手寫個小程式
系列文
欸你這週GO了嘛30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言