[系列] - 使用 go modules 包管理工具(一)

新亮筆記發表於2019-08-26

概述

我想實現一個開箱即用的 API 框架的輪子,這個輪子是基於 Gin 基礎上開發的。

為什麼是開箱即用,它會整合哪些功能?

[系列] - 使用 go modules 包管理工具(一)

以上功能點,都是常用的,後期可能還會增加。

廢話不多說,我們們開始吧。

建立一個專案,我們們首先要考慮一個依賴包的管理工具。

常見的包管理有,dep、go vendor、glide、go modules 等。

最開始,使用過 dep,當時被朋友 diss 了,推薦我使用 go modules 。

現在來說一下 go modules ,這個是隨著 Go 1.11 的釋出和我們見面的,這是官方提倡的新的包管理。

說一個環境變數:GO111MODULE,預設值為 auto 。

當專案中有 go.mod 時,使用 go modules 管理,反之使用 舊的 GOPATH 和 vendor機制。

如果就想使用 go modules ,可以將 GO111MODULE 設定為 on 。

直接上手吧。

初始化

我們們在 GOPATH 之外的地方,新建一個空資料夾 go-gin-api

cd go-gin-api && go mod init go-gin-api
複製程式碼

輸出:

go: creating new go.mod: module go-gin-api

這時目錄中多一個 go.mod 檔案,內容如下:

module go-gin-api

go 1.12
複製程式碼

到這,go mod 初始化就完成,接下來新增依賴包 - gin。

新增依賴包

在目錄中建立一個 main.go 的檔案,放上如下程式碼:

package main

import "github.com/gin-gonic/gin"

func main() {
	r := gin.Default()
	r.GET("/ping", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "pong",
		})
	})
	r.Run() // listen and serve on 0.0.0.0:8080
}
複製程式碼

這程式碼沒什麼特別的,就是官方的入門Demo。

接下來,開始下載依賴包。

go mod tidy
複製程式碼

執行完成後,看一下 go.mod 檔案:

module go-gin-api

go 1.12

require github.com/gin-gonic/gin v1.4.0
複製程式碼

這時,看到新增一個 gin v1.4.0 的包。

還生成了一個 go.sum 的檔案,這個檔案可以暫時先不管。

這時發現了 2 個問題。

1、目錄中沒發現 gin 包,包下載到哪了?

下載到了 GOPATH/pkg/mod 目錄中。

2、GoLand 編輯器中關於 Gin 的引用變紅了?

在這裡編輯器需要設定一下,如圖:

[系列] - 使用 go modules 包管理工具(一)

點選 Apply 和 OK 即可。

如果這招不靈,還可以執行:

go mod vendor
複製程式碼

這個命令是將專案依賴的包,放到專案的 vendor 目錄中,這肯定就可以了。

go mod 命令

go mod tidy

拉取缺少的模組,移除不用的模組。

我常用這個命令。

go mod vendor

將依賴複製到vendor下。

我常用這個命令。

go mod download

下載依賴包。

go mod verify

檢驗依賴。

go mod graph

列印模組依賴圖。

其他命令,可以執行 go mod ,檢視即可。

小結

這篇文章,分享了 go modules 的使用。

  • 使用 go modules 從零搭建一個專案。
  • GoLand 編輯器使用 go modules。

今天就到這了,下一篇文章開始搭建 API 專案了,寫引數驗證。

原始碼地址

github.com/xinliangnot…

[系列] - 使用 go modules 包管理工具(一)

相關文章